我有下面的课。我试图使getConfig()返回指定的类型,然而,它只作为BaseConfig返回。假设我有扩展BaseConfig的MyConfig,我希望该方法返回MyConfig而不是BaseConfig。我真的很感激任何帮助,因为我似乎找不到合适的解决方案,为我工作。
public class LoadedMap<T extends BaseConfig> implements GameMap {
private File world;
private Class<T> configClass;
private T config;
public LoadedMap(File world, Class<T> configClass) {
this.world = world;
this.configClass = configClass;
this.loadConfig();
}
@Override
public File getWorld() {
return this.world;
}
@Override
public String getMapName() {
return this.config.getMapName();
}
@Override
public String getMapAuthor() {
return this.config.getMapAuthor();
}
public <T extends BaseConfig> T getConfig() {
return configClass.cast(config);
}
private void loadConfig() {
this.config = JsonConfig.load(new File(world + File.separator + "map.json"), configClass);
}
}
一些其他类组成了我正在研究的系统:
public class MapManager<T extends BaseConfig> {
private Class<T> configClass;
private List<LoadedMap<T>> maps = new ArrayList<>();
private LoadedMap<T> current = null;
public MapManager(Class<T> configClass) {
this.configClass = configClass;
}
public CycleCompleteEvent cycle() throws MapNotFoundException{
load();
if (maps.size() == 0) {
throw new MapNotFoundException();
}
LoadedMap previous = current;
if (maps.contains(current) && maps.indexOf(current) != maps.size() - 1) {
current = maps.get(maps.indexOf(current) + 1);
} else {
current = maps.get(0);
}
MapSelectedEvent mapSelectedEvent = new MapSelectedEvent(current);
Bukkit.getPluginManager().callEvent(mapSelectedEvent);
if (mapSelectedEvent.getMap() != null) {
current = mapSelectedEvent.getMap();
}
init();
if (current != null) {
clean(previous);
}
CycleCompleteEvent cycleCompleteEvent = new CycleCompleteEvent(current);
Bukkit.getPluginManager().callEvent(cycleCompleteEvent);
return cycleCompleteEvent;
}
private void init() {
prepareWorld();
}
private void init(LoadedMap<T> map) {
if (current != null) {
clean(current);
}
current = map;
prepareWorld();
}
private void prepareWorld() {
WorldCreator creator = new WorldCreator(current.getWorld().getName());
Bukkit.getPluginManager().callEvent(new PreMapLoadEvent(current, creator));
World world = Bukkit.createWorld(creator);
world.setAutoSave(false);
Bukkit.getPluginManager().callEvent(new PostMapLoadEvent(current, world));
}
private void clean(LoadedMap map) {
if (Bukkit.getWorlds().contains(map.getWorld().getName())) {
Bukkit.unloadWorld(map.getWorld().getName(), false);
}
}
public void load() {
File worldContainer = Bukkit.getWorldContainer();
for (File file : worldContainer.listFiles()) {
if (file.isDirectory()) {
for (File f : file.listFiles()) {
if (f.getName().equals("map.json")) {
for (LoadedMap loadedMap : maps) {
if (loadedMap.getWorld() == file) {
continue;
}
}
maps.add(new LoadedMap<>(file, configClass));
}
}
}
}
}
public Class<T> getConfigClass() {
return configClass;
}
public List<LoadedMap<T>> getMaps() {
load();
return maps;
}
public LoadedMap<T> getCurrent() {
return current;
}
}
另一个:
public abstract class Game<T extends BaseConfig> extends BukkitRunnable {
private Plugin plugin;
private boolean cancelled = false;
private MapManager<T> mapManager;
public Game(Plugin plugin, Class<T> configClass) {
this.plugin = plugin;
this.mapManager = new MapManager(configClass);
this.runTaskTimer(plugin, 1, 1);
}
public abstract void run();
@Override
public void cancel() {
if (this.cancelled) {
return;
}
this.cancelled = true;
Bukkit.getScheduler().cancelTask(getTaskId());
}
public Plugin getPlugin() {
return plugin;
}
public boolean isCancelled() {
return cancelled;
}
public MapManager getMapManager() {
return mapManager;
}
}
您正在使您的方法泛型化,但它不应该是:类已经是泛型的了。它应该简单地声明为
public T getConfig() {
return configClass.cast(config);
}
这样,方法返回的类型T就是在类级别定义的类型T。按照您的方式,T是另一个泛型类型,特定于碰巧与类泛型类型同名但不相同的方法。即。它相当于
public <U extends BaseConfig> U getConfig() {
return configClass.cast(config);
}
问题内容: 使用spring,使用以下代码: 我懂了 pojo的片段: 问题答案: 从Spring的角度来看,没有一个通过注册的实例可以将内容转换为对象。感兴趣的方法是。上述所有回报的实现,包括。 由于没有人可以读取您的HTTP响应,因此处理失败,并出现异常。 如果你能控制服务器响应,修改设置到,或东西匹配。 如果您不控制服务器响应,则需要编写和注册自己的(可以扩展Spring类,see 及其子类
org.springframework.web.client.未知内容类型异常:无法提取响应:没有找到适合响应类型[类net.minidev.json.JSONObject]和内容类型[应用程序/json]的HttpMessageConzer endpoint Url还返回JSONObject,因此不知道为什么不匹配
我已经搜索了stackoverflow大约一个小时,但没有解决方案可以解决我的问题。 我想运行这段代码: 但是如果我用nodejs运行这个,我会得到这个错误: 我会感谢你的帮助。
本文向大家介绍JAVA利用泛型返回类型不同的对象方法,包括了JAVA利用泛型返回类型不同的对象方法的使用技巧和注意事项,需要的朋友参考一下 有时需要在方法末尾返回类型不同的对象,而return 语句只能返回一个或一组类型一样的对象。此时就需要用到泛型。 首先先解释个概念, 元组:它是将一组对象直接打包存储于其中的一个单一对象,这个容器对象允许读取其中元素,但不能修改。 利用泛型创建元组 测试 输出
我正在看一些在java 7编译但在Java8编译失败的代码。 错误如下: 我正在运行jdk 1.8.071。 有人知道在Java8中编译和工作的变通方法或解决方案吗? 编辑:错误消息是为调用do某物()的行提供的,为括号前的co提供的。
我正在为Java中的Peg纸牌游戏开发一个解决方案。然而,我的解决方案似乎无法解决游戏。 我正在使用“标准”版本,所以董事会看起来像: 0为空,1为钉,2为空 所需的电路板状态为 我的Solutions()方法是这样工作的: 沿