我必须使用开关来获取枚举的值。枚举就是这个:
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“对象”还是什么?
答案 0 :(得分:3)
如果执行Compass.values();
,则返回值的顺序将是它们在Enum类中的写入顺序。如果您的代码依赖于数组内容的顺序,那么最好像您的示例一样创建自己的数组,并在您需要的位置控制顺序。
如果您只想获取此枚举的特定值(例如NORTH),则只需编写Compass.NORTH.name();
而不是使用数组。
答案 1 :(得分:3)
要直接获取其中一个枚举值的名称而不使用数组,您可以这样做:
Compass.NORTH.name();
Compass.values()
返回的数组是枚举枚举的顺序,因此除非您不喜欢声明的顺序(并且不能更改它),否则单独创建数组没有任何好处,或者您是担心别人会改变订单(例如插入新值)并破坏你的代码。
但是,一般情况下,您希望避免重复,因为这意味着要保留两个而不是一个而且事情很容易失去同步。如果有人添加了NORTH_EAST,SOUTH_WEST等,您必须记住更新数组以满足这些值,或者发现您的代码可能在某些情况下无效。