2016-09-27 128 views
0

在我正在写作的游戏中,我的清单中有一个Collectable对象的列表。当我激活其中一个对象时,有些需要另一个Collectable对象来处理。现在,在我的UI中,我显示了原始对象可能工作的所有可能的候选对象。为此,我检查一个对象是否是一个接口的实例。但是该接口因对象而异。此UI是称为ItemSelector并由主UI调用。使用泛型从方法传递类类型到方法

我构造了ItemSelector,让构造函数以class<T> selectionCriteria作为参数。

<T> ItemSelector(Class<T> selectionCriteria){ 
    // ... Do work. 
} 

然而,这意味着,当我创建这个类的一个对象,我必须按照我想要做的原object.What类型专门硬编码的所有可能的不同可能的接口在switch case声明是否在每个Collectable对象中都有一个方法(Collectable接口将有一个getSelectionCriteriaInterface()方法,该方法将由具体类重写),它将返回它用作selectionCriteria的接口。

我该如何做到这一点。 希望快速回复, 谢谢。

+1

向我们展示更多的代码,很难想象你真正需要的。 – Shadov

回答

1

像这样:

interface Collectable { 
    ... 
    Class<?> getSelectionCriteriaInterface(); 
} 

可能的FPGA实现:

public Class<?> getSelectionCriteriaInterface() { 
    return MyInterface.class; 
} 

然后检查的时候,是这样的:

Collection<Collectable> allItems = ...; 
Collectable c = ...; 

List<Collectable> filtered = allItems.stream() 
    .filter(c.getSelectionCriteriaInterface()::isInstance) 
    .collect(Collectors.toList());