在延續我以前question,我嘗試寫是這樣instanceof似乎不工作 - 我的代碼有什麼問題?
public <T extends LivingThing> T getData(Class<T> clazz, Object otherParam) {
if(clazz instanceof Cat) {
//do something and return a new Cat
}
}
我得到一個編譯錯誤「不兼容的條件操作數類型」。如果條件的方法。我究竟做錯了什麼?我如何在我的方法中檢查類的類型?
UPDATE
好吧,我做了一個代碼更改爲使用isAssignableFrom方法。這是一個新問題。
public <T extends LivingThing> List<T> getData(Class<T> classType) {
LivingThingEnum livingThing = LivingThingEnum
.getLivingThing(classType);
if (livingThings.keySet().contains(livingThing))
return livingThings.get(livingThing);
return null;
}
private Map<LivingThingEnum,List<? extends LivingThing>> livingThings;
這給我一個類型不匹配! - 「無法從列表轉換爲列表」。是不是應該擴展LivingThing,那麼在這種情況下,爲什麼編譯器會拋出一個錯誤?
嘗試你應該考慮一個多態接口,其中每個'LivingThing'有一個GetData方法像Cat這樣的類覆蓋。這是一個更清潔的方法。使用'instanceof'是代碼味道。 –