回答
我很懷疑你會看到性能好處 - 在某些情況下甚至會出現性能下降,這取決於你如何使用它們。我懷疑他們會很重要。
好處不在於性能方面 - 它更清楚地表達或表達您的意圖,從而提高可讀性(和類型安全性)的代碼。例如,對於整數標誌,如果您嘗試在方法調用中使用(比如說)HTTP_STATUS_UNAUTHORIZED作爲文件共享模式的值,則沒有任何事情會抱怨...但是如果這兩者都是枚舉,則該參數將被強制鍵入爲真的只允許文件共享模式(或空,假設你是談論Java)。
謝謝您的回覆;並注意到。 – AedonEtLIRA 2011-02-24 17:45:20
枚舉更清晰地表達你正在嘗試做什麼。使用它們,不用擔心性能;性能影響可以忽略不計。
它們基本上是一樣的東西,除非枚舉是自我記錄的。我建議一旦其他人可能與您的代碼聯繫,就使用枚舉。
Java枚舉與整數非常不一樣。他們比這更強大(而且比大多數其他語言中的枚舉更強大)。 – 2011-02-24 17:11:06
你說得對,他們更強大,是類型安全的。我可能沒有充分表達的是,用枚舉明顯替換int標誌將產生相同的結果,除了以更可讀的方式。 – 2011-02-24 17:14:41
一個Enum類型有自己的方法和optimized containers。你應該比int標記更喜歡它,因爲它更安全並且可能更有效率(儘管我懷疑它中有很多!)。
除了類型安全的代碼,你有一個參考共享集合(可重用性)
使用位掩碼標誌的相當於是使用EnumSet(這恰好使用位面罩)
enum Colour { RED, GREEN, BLUE }
Set<Colour> colours = EnumSet.noneOf(Colour.class);
colours.add(Colour.RED);
colours.add(Colour.GREEN);
if (colours.contains(Colour.RED)) // true
System.out.println(colours+" contains RED");
if (colours.contains(Colour.BLUE)) // false
像往常一樣,Effective Java最好說它:使用該int
枚舉 模式
程序是易碎的。因爲
int
枚舉是編譯時常量,所以它們 被編譯到使用 它們的客戶端中。如果與 枚舉常量關聯的int
更改了,則必須重新編譯其客戶端 。如果它們不是, 它們仍然會運行,但它們的 行爲將是未定義的。有 不容易的方法將
int
枚舉 常量轉換成可打印的字符串。如果 您打印這樣一個常數或從調試器顯示它 ,你看到的只是一個 數字,這不是很有幫助。 有迭代 在所有int
枚舉常數在 基,或甚至以獲得 一個int
枚舉組大小沒有可靠的方法。
(+ 10多頁的爲什麼枚舉更好:-))
謝謝你,這是高度描述性的。 – AedonEtLIRA 2011-02-24 19:20:43
- 1. C#的int標誌枚舉
- 2. C#標誌VS樣品枚舉
- 3. 大標誌枚舉
- 4. 標誌,枚舉(C)
- 5. 地圖枚舉爲[標誌]枚舉
- 6. 與枚舉標誌掙扎
- 7. C#枚舉標誌比較
- 8. JavaScript:枚舉標誌檢查
- 9. 標誌枚舉在C#
- 10. C++檢查枚舉標誌
- 11. F#位標誌枚舉
- 12. 綁定標誌枚舉XAML
- 13. 枚舉標誌屬性C#
- 14. 標誌枚舉屬性
- 15. 枚舉VS查找表VS枚舉反射VS State模式
- 16. Serialize枚舉爲int
- 17. 枚舉vs強類型枚舉
- 18. 標誌枚舉和相互排斥枚舉重疊的意思
- 19. 獲取枚舉標誌的所有枚舉名稱
- 20. 存儲int顯示標籤?枚舉
- 21. 枚舉VS在d
- 22. 看不慣枚舉標誌與0X2值
- 23. 類型安全枚舉位標誌
- 24. NHibernate的QueryOver由枚舉標誌
- 25. 測試枚舉標誌的區別?
- 26. 沒有模塊標誌出口枚舉
- 27. C#具有標誌的枚舉屬性
- 28. 枚舉標誌與NHibernate /流利
- 29. 枚舉標誌上的按位運算
- 30. 迭代標誌枚舉中的值?
你說什麼語言呢?例如,在C#中它們是一樣的。 – 2011-02-24 17:07:30