第三十五条:使用实例字段代替序号

所有枚举类型都有一个ordinal()方法,他返回枚举常量在这个类型中以数字表示的位置信息,也就是序号。

举例:

public enum Ensemble {
    SOLO,DUET,TRIO,QUARTET,QUINTET,SEXTET,SEPTET,OCTET,NONET,DECTET;
    public int numberOfMusicians() {
        return ordinal()+1;
    }

    public static void main(String[] args) {
        System.out.println(Ensemble.SOLO.numberOfMusicians());
    }
}

打印:

1

Process finished with exit code 0

缺点:如果有人改了顺序,那么就残了,全部都变了,不容易维护。于是:

如果需要记录顺序最好使用字段记录(永远不要使用ordinal),避免位置发生改变时ordinal值变动影响业务

举例:

public enum Ensemble {
    SOLO(1),DUET(2),TRIO(3),QUARTET(4),QUINTET(5),
    SEXTET(6),SEPTET(7),OCTET(8),NONET(9),DECTET(10);
    //使用字段代替ordinal
    private final int numberOfMusicians;

    Ensemble(int size) {
        this.numberOfMusicians = size;
    }
    public int getNumberOfMusicians() {
        return numberOfMusicians;
    }

    public static void main(String[] args) {
        System.out.println(Ensemble.DUET.getNumberOfMusicians());
    }
}

打印:

2

Process finished with exit code 0

Enum文档中对ordinal方法有说明,大多数程序员用不到这个方法,它是设计用于基于枚举的通用数据结构的,如enumset和enumMap,最好还是避免使用ordinal方法。

所有文章无条件开放,顺手点个赞不为过吧!

  

                                          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值