2016-09-27 126 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());