我最近遇到了一個討論在C#中使用基於枚舉的類實現的article,這很令人印象深刻。第二個here是用Java編寫的。但是,我的同事建議我改用Enum。在Java中,Enum和基於枚舉的類實現有什麼優點和缺點?
任何人都可以指出使用它們的每個優點和缺點,以及何時使用它?
我最近遇到了一個討論在C#中使用基於枚舉的類實現的article,這很令人印象深刻。第二個here是用Java編寫的。但是,我的同事建議我改用Enum。在Java中,Enum和基於枚舉的類實現有什麼優點和缺點?
任何人都可以指出使用它們的每個優點和缺點,以及何時使用它?
在Java中有一定的侷限性,枚舉類型充當聲明瞭其獨特的一類名稱。它與其他任何設計用於創建常量值的類非常相似。最近,我還遇到了一個消息,在Java中枚舉聲明之前,創建了一個類枚舉類。就像在這個問題上提出的文章一樣,JVM 1.5之前的基於類的枚舉被廣泛使用。
您可以檢查此來源:http://javarevisited.blogspot.com/2011/08/enum-in-java-example-tutorial.html
我認爲這是關於Java枚舉一個很好的解釋,爲什麼他們被創建。該文章聲稱Enum的3個優點:
1)類型安全。
2)除非這個類完全工作,否則Enum類很容易出現打印問題。當編碼員希望返回字符串結果時,返回一個原始值。根據我的經驗,在課堂上增加一些內容,這是可以避免的。但問題是,編碼器是否方便?
3)同樣,訪問基於類的一個實例。因此,編碼器不能直接訪問Enum選項。編碼器必須使用類名稱。
因此:爲了方便和代碼可讀性問題,枚舉是一個不錯的選擇。另外,枚舉結構類似於嵌套在載體類中的單個類。如果編碼人員想要增強Enum Design並創建他們自己的風格,他們可以回到舊的手動編碼的基於類的系統。
Java標準枚舉實現已經完全基於類 - 您可以在標準Java枚舉中定義任何您喜歡的方法,成員變量等。
有這樣一個很好的說明與官方枚舉文檔中的例子:
http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
此外,該EnumSet
,EnumMap
,等集合類是非常強大和高效。 EnumSet
與使用原始位域具有相似的性能!如果您使用適當的枚舉,則只能訪問這些類。
您引用的Java文章是從2001年開始的。那時候,Java沒有枚舉,作者描述的方法是程序員過去常常用來解決Java缺陷的方法。 Java 5在2004年引入了枚舉,現在舊的模式已經過時。所以你的同事們應該使用枚舉。
主要區別在於Java的枚舉更加簡單,不能切換基於C#的枚舉類實現,而基於枚舉的類更多的是類而不是枚舉數據類型,即它可以被擴展。而枚舉不能從另一個類派生,並且不能擴展。
的Java替代了基於C#的枚舉類也能像:
public abstract static class CreditCard {
enum CreditCardType{
AMERICAN_EXPRESS, MASTER, VISA, DISCOVER;
}
CreditCardType type;
public abstract void operation1();
public abstract void operation2();
}
HI我會建議使用枚舉,如果你知道如何使用它。 ,因爲他們有很多原因有些是
就像它有很多adva ntage但其他手是具有很多缺點也很喜歡
那麼,不完全完全 - 你不能從另一個類繼承enum或擴展它。 –
@AndreyChaschev相關:http://stackoverflow.com/q/1414755/1225328 – sp00m