4

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

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

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

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

但是这本书说这样做的方法是:

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

他们中的任何一个都比另一个更好吗?我的意思是,创建枚举“对象”或其他东西更稳定吗?

4

2 回答 2

3

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

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

于 2012-07-24T06:58:49.183 回答
3

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

Compass.NORTH.name();

返回的数组Compass.values()按照枚举的声明顺序,因此单独创建数组没有任何好处,除非您不喜欢声明的顺序(并且无法更改)或者您担心其他人会更改顺序(例如插入一个新值)并破坏您的代码。

但是,通常,您希望避免重复,因为这意味着要维护两件事而不是一件事,而且事情很容易不同步。如果有人添加了 NORTH_EAST、SOUTH_WEST 等,您必须记住更新您的数组以适应这些值,或者发现您的代码在某些情况下可能不起作用。

于 2012-07-24T07:00:00.117 回答