我目前正在用java构建游戏(基于回合的RPG),并面临库存UI中的问题。也许我的问题是众所周知的,或者有一个简单的解决方案,但从来没有接受任何培训,我仍然会问这个问题。检查泛型中的引用类型java
在选择项目后显示库存时,我检查该项目是否实现了SpecificItemWorker
界面,即对必须传入其takeAction()
方法的特定GameObject
执行操作。当选择必须传递的对象时,我显示所有可能的候选对象供用户选择。例如,假设用户选择一个作用于实现Upgradable
接口的任何对象的UpgradeParchment
。在此,我启动一个ItemSelector
,显示清单中实施Upgradable
的所有项目。然而,对于不同的类,为了成为可能的候选对象而需要实现的接口是不同的(请注意,某些对象作用于游戏环境而不是特定对象,但我们在这里没有考虑这种情况。 )。现在,我不想在switch case
语句中对可能的接口进行硬编码,而是希望它是动态的。我尝试使用泛型,但它不允许检查对象是否为Type参数的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
objects.Similarly的名单,在我的测试方法,我已经更新了它types.Although是一个小小的变化,抱歉给您造成不便。 Collectable
也是一个接口。
'class.getTypeName()'方法返回关于类类型的信息,但不能用于传递IS-A关系test.Also,'SpecificItemWorker'是一个接口。它用于决定用户选择使用的对象是否需要另一个“可收集”对象来处理。 –
这在多个级别上不正确,但特别是使用'=='来比较字符串,这永远不会是真的 – Bohemian