我目前正在用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