Enum有用嗎?
回答
還有其他的事情可以做和使用它們的原因,但我使用枚舉的主要原因是爲了防止一個無效參數的可能性。例如,假設下面的方法:
public void doSomethingWithAMonth(int monthNum);
這不僅曖昧(?做月指數從1開始,或爲0),但你可以給降權無效數據(13 +,負數) 。如果你有一個枚舉Month
與一月,二月,等簽名變爲:
public void doSomethignWithAMonth(Month month);
代碼調用此方法會更可讀的,不能提供無效數據。
謝謝!現在我想我明白它好一點了:) – 2012-07-09 11:55:20
這是一個簡單而好的例子 – njfife 2013-09-19 16:34:12
從名稱「enum」開始,它非常適合枚舉常量,它提供了擴展功能。例如,你可以存儲一些常量,包括幾個參數,如:constantId,constanNameString,附加參數。另外,枚舉可以包含函數。
enum的一個奇特的使用是做一個單身人士。
enum
強制編碼器從預先定義的實體或概念列表中進行選擇。雖然可以通過類實現相同的目標或將變量設置爲特定的已知值,但枚舉並不容易出錯,因爲它會通告並強制實現值的設置者可以從中選擇的菜單。
一個枚舉有助於防止人們做他們不應該做的事情。舉例來說,如果我有:
public final static int WEATHER_SUNNY = 0;
public final static int WEATHER_RAINY = 1;
public final static int WEATHER_HAIL = 2;
然後我可以做的:MyClass.WEATHER_SUNNY + MyClass.WEATHER_HAIL
這是沒有意義的。這就是爲什麼有一個天氣枚舉更好。這使代碼更具可讀性,並且不允許求和兩個天氣整數。
我不是這個例子的忠實粉絲,如果僅僅是因爲我覺得它鼓勵狹隘的想法。沒有理由像這樣不同的天氣類型不能重疊,事實上,他們經常這樣做。 – Thor84no 2014-08-20 09:29:58
@ Thor84no:謝謝你的評論。然而,這一切都取決於領域和應用程序,所以說「鼓勵狹隘思維」。似乎不合適。 – 2014-08-20 09:32:48
我對任何具有多個不變「類型」的東西使用枚舉。即一週的幾天。
爲什麼我在這種情況下不使用字符串是因爲我無法在字符串上進行switch語句,並且我可以在Enum上這樣每週的每一天我都可以做一些特定的事情。
與單模式工作時,我也用枚舉,檢查Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS),報價:
「雖然這種方法還沒有得到廣泛 採用,單元素枚舉類型是實現一個單身的最佳方式「。不要粘貼代碼閱讀這本書很好。
如果我是你,我首先會閱讀Thinking in java章節枚舉類型。然後在那之後有效的Java第6章和你應該很好
當你有一個功能重要且有限的值的列表時,Enum非常有用。
舉例說明,您需要使用一週中的某一天:另一天不會添加,您寧願有一天。星期一在你的代碼中而不是數字,並且必須記住0是星期一,1是星期二,依此類推。 這讓switch語句更容易理解也與:
Switch(day) {
case Monday : ... break;
case Tuesday : ... break
etc.
}
除其他事項外,枚舉是創建單身有用:
What is an efficient way to implement a singleton pattern in Java?
我會添加到其他的答案是枚舉是隻有固定數量的實例的類。這些實例可能具有字段和方法,並可用作任何其他Java對象。例如,Month
枚舉可以定義方法,如
public int getNumberOfDays(int year);
public boolean isFirstOfYear();
最簡單的定義 - An enum is just like any other class, with a predefined set of instances.
最佳枚舉的一部分,它可以在我們不能使用串行中的開關語句中使用。
而Enum是一種安全類型,因此您不能在運行時分配新值。
只要有人遇到這個問題,從Java 7開始,在'switch'語句中不能使用''''字符串就不再是真的了。 http://docs.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html – Thor84no 2014-08-20 09:32:32
- 1. 使用class.isEnum()或instanceof Enum更好嗎?
- 2. 使用Enum?
- 3. 使用ENUM
- 4. Enum可能過於臃腫嗎?
- 5. Enum可以完全序列化嗎?
- 6. 我可以擴展Enum a la Enum.GetValues()嗎?
- 7. 除了類,接口或Enum還有別的東西嗎?
- 8. 與Enum類型的HashSet有奇異的相等結果嗎?
- 9. Hibernate/JPA:map <Object,Enum> manytomany有可能嗎?
- 10. Keys Enum有哪些格式可用?
- 11. Enum有多個描述
- 12. Enum沒有被聲明?
- 13. Enum和Dictionary <Enum,Action>
- 14. Mysql空ENUM到postgresql ENUM
- 15. 我可以使用Enum引用一個文本字符串嗎?
- 16. 使用enum可以使用地圖,反之亦然嗎?
- 17. 在[C]中將`enum`轉換爲其他`enum`是否有效?
- 18. HttpContext.Current.Application.Get([some enum])和enum之間有什麼區別?
- 19. 在這種情況下使用Enum多態性有什麼好處嗎?
- 20. Enum適用於此?
- 21. 使用ENUM類型
- 22. AXVLC.VLCPlaylistMode的用途enum
- 23. PostgreSQL,用Enum替換
- 24. 我可以使用ENUM作爲參數嗎? C#
- 25. 你可以使用Enum for Double變量嗎?
- 26. 我可以使用來自php的查詢修改ENUM嗎?
- 27. 用Enum填充通用JComboBox
- 28. webservice enum
- 29. group by all enum values without enum values
- 30. Enum和enum之間的區別
http://stackoverflow.com/questions/481068/when-to-use-enum-or-collection-in-java – Habib 2012-07-09 10:41:12
http://stackoverflow.com/questions/2077634/enum-in-java-advantages – assylias 2012-07-09 10:43:44