第31条:用实例域代替序数

问题:

实现一个枚举,要求:Fruit(水果)枚举方法内有三个属性,分别是:APPLE(苹果)-1、PEAR(梨)-2、ORANGE(橘子)-3

第31条:用实例域代替序数_第1张图片

枚举类型会自动生成一个ordinal()方法,返回常量所处的位置索引。.

但是这种方法存在一些问题:

1、以后重排序,会破坏numberOfFruit()

2、这种方法得出的常量对应的int值一定是唯一的,但有时我们要不唯一

优化

第31条:用实例域代替序数_第2张图片

结论:

永远不要根据枚举的序数导出与他关联的值,而是要将它保存在一个实例域中。

拓展

后台输出结果是什么?

第31条:用实例域代替序数_第3张图片

结果:

第31条:用实例域代替序数_第4张图片




你可能感兴趣的:(第31条:用实例域代替序数)