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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Linux的文本编辑和文本内容查看命令
    服务器日志查看处理(一)
    MAC 系统java开发环境搭建教程
    git撤销已经push到远端的commit
    Centos7 编译安装 Libmcrypt 库
    curl和wget的区别和使用
    docker 安装vim和yum命令
    docker安装GD扩展
    【docker】为docker下的php容器安装php-redis扩展【编译安装】
    mysql大表优化方案
  • 原文地址:https://www.cnblogs.com/haokaibo/p/use-instance-fields-instead-of-ordinals.html
Copyright © 2011-2022 走看看