【发布时间】:2016-09-27 07:04:11
【问题描述】:
我目前正在用 java(基于回合的 RPG)构建游戏,并且在库存 UI 中遇到问题。也许我的问题是众所周知的或者有一个简单的解决方案,但是我没有接受过任何培训,我仍然会问这个问题。
在选择一个项目后显示库存时,我检查该项目是否实现了SpecificItemWorker 接口,即作用于必须传递给其takeAction() 方法的特定GameObject。在选择必须传递的对象时,我会显示所有可能的候选对象供用户选择。例如,假设用户选择了一个UpgradeParchment,它作用于任何实现Upgradable 接口的对象。在这里,我启动了一个ItemSelector,它显示了库存中实现Upgradable 的所有项目。但是对于不同的类,对象需要实现的接口才能成为可能的候选对象会有所不同。(请注意,某些对象作用于游戏环境而不是特定对象,但我们在这里不考虑这种情况。 )。现在不是在switch case 语句中硬编码可能的接口,我希望它是动态的。我尝试使用泛型,但它不允许检查对象是否是类型参数的instanceof .
以下代码给出了编译错误:
package ui;
import objects.Collectable;
public class ItemSelector<T> {
public void test(Collectable ob) {
if (ob instanceof T) {// compile error
// do work
}
}
}
有人知道如何实现吗?感谢您的帮助。
寻求快速回复, 谢谢。
编辑:
testAction() 方法中的参数将是 Collectable 类型,因为在我的库存类中,只有一个 Collectable 对象列表。同样,在我的测试方法中,我已经更新了类型。虽然它是次要的更改,不便之处见谅。Collectable也是一个接口。
【问题讨论】:
标签: java generics types reference instanceof