2012-07-09 16 views
10

閱讀枚舉的一些問題和答案後,我並不覺得真正有用​​的...Enum有用嗎?

它是類和變量之間的東西,但我知道我在哪裏可以使用它,所以它會比較有用,然後一類,或者例如一些變量。

+6

http://stackoverflow.com/questions/481068/when-to-use-enum-or-collection-in-java – Habib 2012-07-09 10:41:12

+1

http://stackoverflow.com/questions/2077634/enum-in-java-advantages – assylias 2012-07-09 10:43:44

回答

32

還有其他的事情可以做和使用它們的原因,但我使用枚舉的主要原因是爲了防止一個無效參數的可能性。例如,假設下面的方法:

public void doSomethingWithAMonth(int monthNum); 

這不僅曖昧(?做月指數從1開始,或爲0),但你可以給降權無效數據(13 +,負數) 。如果你有一個枚舉Month與一月,二月,等簽名變爲:

public void doSomethignWithAMonth(Month month); 

代碼調用此方法會更可讀的,不能提供無效數據。

+1

謝謝!現在我想我明白它好一點了:) – 2012-07-09 11:55:20

+1

這是一個簡單而好的例子 – njfife 2013-09-19 16:34:12

2

從名稱「enum」開始,它非常適合枚舉常量,它提供了擴展功能。例如,你可以存儲一些常量,包括幾個參數,如:constantId,constanNameString,附加參數。另外,枚舉可以包含函數。

enum的一個奇特的使用是做一個單身人士。

4

enum強制編碼器從預先定義的實體或概念列表中進行選擇。雖然可以通過類實現相同的目標或將變量設置爲特定的已知值,但枚舉並不容易出錯,因爲它會通告並強制實現值的設置者可以從中選擇的菜單。

4

一個枚舉有助於防止人們做他們不應該做的事情。舉例來說,如果我有:

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這是沒有意義的。這就是爲什麼有一個天氣枚舉更好。這使代碼更具可讀性,並且不允許求和兩個天氣整數。

+0

我不是這個例子的忠實粉絲,如果僅僅是因爲我覺得它鼓勵狹隘的想法。沒有理由像這樣不同的天氣類型不能重疊,事實上,他們經常這樣做。 – Thor84no 2014-08-20 09:29:58

+0

@ Thor84no:謝謝你的評論。然而,這一切都取決於領域和應用程序,所以說「鼓勵狹隘思維」。似乎不合適。 – 2014-08-20 09:32:48

10

我對任何具有多個不變「類型」的東西使用枚舉。即一週的幾天。

爲什麼我在這種情況下不使用字符串是因爲我無法在字符串上進行switch語句,並且我可以在Enum上這樣每週的每一天我都可以做一些特定的事情。

與單模式工作時,我也用枚舉,檢查Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS),報價:

「雖然這種方法還沒有得到廣泛 採用,單元素枚舉類型是實現一個單身的最佳方式「。不要粘貼代碼閱讀這本書很好。

如果我是你,我首先會閱讀Thinking in java章節枚舉類型。然後在那之後有效的Java第6章和你應該很好

2

當你有一個功能重要且有限的值的列表時,Enum非常有用。

舉例說明,您需要使用一週中的某一天:另一天不會添加,您寧願有一天。星期一在你的代碼中而不是數字,並且必須記住0是星期一,1是星期二,依此類推。 這讓switch語句更容易理解也與:

Switch(day) { 
    case Monday : ... break; 
    case Tuesday : ... break 
    etc. 
} 
3

我會添加到其他的答案是枚舉是隻有固定數量的實例的類。這些實例可能具有字段和方法,並可用作任何其他Java對象。例如,Month枚舉可以定義方法,如

public int getNumberOfDays(int year); 
public boolean isFirstOfYear(); 
7

最簡單的定義 - An enum is just like any other class, with a predefined set of instances.

最佳枚舉的一部分,它可以在我們不能使用串行中的開關語句中使用。

而Enum是一種安全類型,因此您不能在運行時分配新值。

+1

只要有人遇到這個問題,從Java 7開始,在'switch'語句中不能使用''''字符串就不再是真的了。 http://docs.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html – Thor84no 2014-08-20 09:32:32