Effective Java~35. 用实例域代替序数
生活随笔
收集整理的這篇文章主要介紹了
Effective Java~35. 用实例域代替序数
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
許多枚舉通常與單個(gè) int 值關(guān)聯(lián)。所有枚舉都有一個(gè) ordinal 方法,它返回每個(gè)枚舉常量類型的數(shù)值位置。你可能想從序數(shù)中派生一個(gè)關(guān)聯(lián)的 int 值:
// Abuse of ordinal to derive an associated value - DON'T DO THIS public enum Ensemble {SOLO, DUET, TRIO, QUARTET, QUINTET,SEXTET, SEPTET, OCTET, NONET, DECTET;public int numberOfMusicians() { return ordinal() + 1; } }????????雖然這個(gè)枚舉能正常工作,但對(duì)于維護(hù)來(lái)說(shuō)則是一場(chǎng)噩夢(mèng)。如果常量被重新排序,numberOfMusicians 方法將會(huì)中斷。
????????幸運(yùn)的是,這些問(wèn)題有一個(gè)簡(jiǎn)單的解決方案。 永遠(yuǎn)不要從枚舉的序號(hào)中得出與它相關(guān)的值; 請(qǐng)將其保存在實(shí)例屬性中:
public enum Ensemble {SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5),SEXTET(6), SEPTET(7), OCTET(8), DOUBLE_QUARTET(8),NONET(9), DECTET(10), TRIPLE_QUARTET(12);private final int numberOfMusicians;Ensemble(int size) { this.numberOfMusicians = size; }public int numberOfMusicians() { return numberOfMusicians; } }????????枚舉規(guī)范對(duì)此 ordinal 方法說(shuō)道:“大多數(shù)程序員對(duì)這種方法沒(méi)有用處。 它被設(shè)計(jì)用于基于枚舉的通用數(shù)據(jù)結(jié)構(gòu),如 EnumSet 和 EnumMap 。“除非你在編寫這樣數(shù)據(jù)結(jié)構(gòu)的代碼,否則最好避免用 ordinal 方法。
總結(jié)
以上是生活随笔為你收集整理的Effective Java~35. 用实例域代替序数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 设计原本思维导图笔记
- 下一篇: Preserve Whole Objec