zoukankan      html  css  js  c++  java
  • Effective Java 31 Use instance fields instead of ordinals

    Principle

    Never derive a value associated with an enum from its ordinal; store it in an instance field instead.

    Bad practice Demo

    // 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;}

    }

       

    // The right way

    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; }

    }

    Disadvantages

    1. If the constants are reordered, the numberOfMusicians method will break.
    2. If you want to add a second enum constant associated with an int value that you've already used, you're out of luck.
    3. You can't add a constant for an int value without adding constants for all intervening int values.

    Summary

    The Enum specification has this to say about ordinal: "Most programmers will have no use for this method. It is designed for use by general-purpose enum based data structures such as EnumSet and EnumMap." Unless you are writing such a data structure, you are best off avoiding the ordinal method entirely.

       

    作者:小郝
    出处:http://www.cnblogs.com/haokaibo/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Objective-C中#define的常见用法
    OpenGL ES为缓存提供数据的7个步骤
    绕指定点旋转算法
    矩阵平移旋转缩放公式
    矩阵和向量的乘法顺序
    干货集合
    RGB颜色空间与YCbCr颜色空间的互转
    UINavi中push控制器的时候隐藏TabBar
    CZLayer的阴影
    CALayer初认识
  • 原文地址:https://www.cnblogs.com/haokaibo/p/use-instance-fields-instead-of-ordinals.html
Copyright © 2011-2022 走看看