項枚舉假如我有幾個特定的類,所有擴展一個抽象類,像這樣:(?相關)創建相關的類
public abstract AbstractClass {
// abstract stuff here
}
public FirstSpecificClass extends AbstractClass {
// specific stuff here
}
public SecondSpecificClass extends AbstractClass {
// specific stuff here
}
我需要在其他地方創建一個enum
,其中每個條目連接與一個特定的類;爲此,我將特定類作爲構造函數參數傳遞並將其作爲私有字段存儲在枚舉中(我也爲該字段提供了一個getter方法)。我還需要創建一個靜態方法,它將某個特定類的實例作爲參數並返回適當的枚舉元素(或null)。我將通過遍歷每個枚舉條目並將instanceof
與前面提到的專用字段的getter結合使用來完成此操作。這是我的嘗試:
public enum Types {
FIRST(FirstSpecificClass.class), // line 2
SECOND(SecondSpecificClass.class); // line 3
private Class<AbstractClass> classType;
private Types(Class<AbstractClass> classType) {
this.classType = classType;
}
public Class<AbstractClass> getClassType() {
return this.classType;
}
public static Types fromTypeInstance(AbstractClass instance) {
for(Types t : Types.values())
if(instance instanceof t.getClassType()) return t; // line 17
return null;
}
}
我似乎誤解了如何將類類型存儲爲一個字段,以便它可以在instanceof
檢查後返回和使用。這個代碼是生產幾種編譯時錯誤:
- (2枚舉的線):構造
Types(Class<FirstSpecificClass>)
未定義 - (枚舉的3線):構造
Types(Class<SecondSpecificClass>)
未定義 - (線枚舉的)17:數不兼容類型
boolean
和Class<AbstractClass>
我不是通常是一個Java程序員,和我的泛型的理解和instanceof
是模糊的最好的,雖然我有一個公關etty公司把握OOP的概念。我如何解決這些錯誤並達到預期效果?
aha!謝謝!這解決了構造函數中的類型不兼容問題。我仍然在'instanceof'檢查中得到一個錯誤,因爲右邊的參數實際上不應該是一個Class對象(顯然它需要是一個「類型」)。我如何在適當的情況下進行投票以實現檢查實例? – 2014-12-05 20:07:15
你解決了,因爲我打字。謝謝! – 2014-12-05 20:07:47
我也注意到這個錯誤,我更新了我的答案。 – rgettman 2014-12-05 20:08:12