比方說,我有幾臺機器:比較枚舉條目 - Java的
//Test code of course.
public class Start{
public static void main(String args[]){
System.out.println(Machine.COFFEE_GRINDER.getCatalogId());
System.out.println(Machine.COFFEE_MACHINE.isOfType(Machine.BASIC_MACHINE));
//The above should be true.
}
private enum Machine {
BASIC_MACHINE (-1),
BEVERAGE (-1),
COFFEE(-1),
COFFEE_GRINDER (5),
COFFEE_MACHINE (6),
GARDEN (-1),
LAWN_MOWER (28);
private final int catalogId;
public int getCatalogId(){
return catalogId;
}
public boolean isOfType(Machine to){
return this == to;
}
Machine (int catalogId) {
this.catalogId = catalogId;
}
}
}
在上面的例子中有機器,因爲它們會出現在目錄中,並具有與之相關的ID號。還有章節和章節的部分。所以BEVERAGE機器仍然是BASIC_MACHINE。一臺咖啡機仍然是一臺飲料機。
程序中的一些函數在執行其功能之前,必須檢查機器是否實際上是一臺BEFERAGE機器。目錄中的COFFEE_GRINDER和COFFEE_MACHINE都會檢出並且函數應該通過。
我正在尋找的行爲可以與instanceof或抽象類的繼承相媲美。無論如何,COFFEE_MACHINE絕對是一種BASIC_MACHINE,我想檢查一下。
所以:
Machine.COFFEE_MACHINE isa Machine.COFFEE
Machine.BEVERAGE isa MACHINE.BASIC_MACHINE
Machine.LAWN_MOWER isa Machine.GARDEN == Machine.BASIC_MACHINE
Machine.COFFEE_MACHINE isnota Machine.COFFEE_GRINDER
Machine.LAWN_MOWER isnota Machine.COFFEE
你只需要遍歷從最專業的'enum'值開始的繼承路徑,並檢查每一步。聽起來很微不足道。 – Jack
'VENDING'未定義。你的意思是'飲料'嗎? – Andreas
您不能指定'Machine.COFFEE_MACHINE = Machine.COFFEE'等,因爲枚舉常量是常量。 「實現某些東西?」如果你能描述你想要完成的事情,這將會有所幫助。標題提到了繼承,但除了匿名體類之外,你不能繼承一個枚舉類型,也沒有說什麼繼承與任何東西有關。你不需要「檢查類型」就可以知道每個常量,它是__個對象,是'Machine'類型的。如圖所示,您的代碼不會編譯。請澄清你想要的,並提供可編譯的代碼。 –