Effective Java~35. 用实例域代替序数
生活随笔
收集整理的這篇文章主要介紹了
Effective Java~35. 用实例域代替序数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
許多枚舉通常與單個 int 值關聯。所有枚舉都有一個 ordinal 方法,它返回每個枚舉常量類型的數值位置。你可能想從序數中派生一個關聯的 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; } }????????雖然這個枚舉能正常工作,但對于維護來說則是一場噩夢。如果常量被重新排序,numberOfMusicians 方法將會中斷。
????????幸運的是,這些問題有一個簡單的解決方案。 永遠不要從枚舉的序號中得出與它相關的值; 請將其保存在實例屬性中:
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; } }????????枚舉規范對此 ordinal 方法說道:“大多數程序員對這種方法沒有用處。 它被設計用于基于枚舉的通用數據結構,如 EnumSet 和 EnumMap 。“除非你在編寫這樣數據結構的代碼,否則最好避免用 ordinal 方法。
總結
以上是生活随笔為你收集整理的Effective Java~35. 用实例域代替序数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计原本思维导图笔记
- 下一篇: Java加密与解密的艺术~DESede实