获取枚举.values()[]或创建枚举数组?

时间:2012-07-24 06:53:57

标签: java enums

我必须使用开关来获取枚举的值。枚举就是这个:

public enum Compass {      NORTH, SOUTH, EAST, WEST;      }

我做了这个(在枚举之外的另一个类中):

Compass.values()[0].name()

但是这本书说,做到这一点的方法是:

Compass[] comp = {  Compass.NORTH, Compass. SOUTH, Compass.EAST, Compass.WEST  }
comp[0].name();

他们中的任何一个比另一个好吗?我的意思是,更稳定地创建一个Enum“对象”还是什么?

2 个答案:

答案 0 :(得分:3)

如果执行Compass.values();,则返回值的顺序将是它们在Enum类中的写入顺序。如果您的代码依赖于数组内容的顺序,那么最好像您的示例一样创建自己的数组,并在您需要的位置控制顺序。

如果您只想获取此枚举的特定值(例如NORTH),则只需编写Compass.NORTH.name();而不是使用数组。

答案 1 :(得分:3)

要直接获取其中一个枚举值的名称而不使用数组,您可以这样做:

Compass.NORTH.name();

Compass.values()返回的数组是枚举枚举的顺序,因此除非您不喜欢声明的顺序(并且不能更改它),否则单独创建数组没有任何好处,或者您是担心别人会改变订单(例如插入新值)并破坏你的代码。

但是,一般情况下,您希望避免重复,因为这意味着要保留两个而不是一个而且事情很容易失去同步。如果有人添加了NORTH_EAST,SOUTH_WEST等,您必须记住更新数组以满足这些值,或者发现您的代码可能在某些情况下无效。