作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我当前正在编写的游戏中,我有一个列表 Collectable
我的库存中的对象。当我激活这些对象之一时,有些对象需要另一个 Collectable
现在,在我的 UI 中,我显示了所有可能的候选对象 Collectable
原始对象可能处理的对象。为此,我检查对象是否是接口(interface)的实例。但是该接口(interface)因对象而异。此 UI 称为 ItemSelector
并由主 UI 调用。
我构造了ItemSelector
通过使构造函数采用 class<T> selectionCriteria
作为参数。
<T> ItemSelector(Class<T> selectionCriteria){
// ... Do work.
}
但是,这意味着当我创建此类的对象时,我必须专门对 switch case
中可能存在的所有不同可能接口(interface)进行硬编码。根据原始对象的类型进行声明。我想做的是在 Collectable
的每个中都有一个方法对象(Collectable
接口(interface)将有一个 getSelectionCriteriaInterface()
方法,该方法将被具体类覆盖),该方法将返回用作选择标准的接口(interface)。
我该如何实现这一目标。希望尽快得到答复,谢谢。
最佳答案
像这样:
interface Collectable {
...
Class<?> getSelectionCriteriaInterface();
}
可能的实现:
public Class<?> getSelectionCriteriaInterface() {
return MyInterface.class;
}
然后在检查时,类似:
Collection<Collectable> allItems = ...;
Collectable c = ...;
List<Collectable> filtered = allItems.stream()
.filter(c.getSelectionCriteriaInterface()::isInstance)
.collect(Collectors.toList());
关于java - 使用泛型将类类型从一个方法传递到另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39722918/
我是一名优秀的程序员,十分优秀!