【发布时间】:2015-05-06 13:18:05
【问题描述】:
来自阅读Enum Types, The Java Tutorials:
编译器在创建的时候会自动添加一些特殊的方法 一个枚举。例如,它们有一个静态值方法,该方法返回一个 按顺序包含枚举的所有值的数组 宣布。这种方法通常与 for-each 构造迭代枚举类型的值。
我想知道values() 方法的具体作用。它实际上只是返回一个类成员/常量,还是在幕后进行更多?以下代码绝不是为了展示最佳实践,但强调了这个问题的答案将如何影响我解决问题的方式:
如果values() 返回一个类成员/常量,我会考虑随意调用它(参见getAllValues()),如下所示:
enum ExampleEnum {
A("A's String"), B("B's String"), C("C's String");
ExampleEnum(String someValue) {
this.someValue = someValue;
}
private final String someValue;
private String[] getAllValues() {
String[] result = new String[values().length];
for (int i = 0; i < values().length; i++) {
result[i] = values()[i].someValue;
}
return result;
}
}
如果它正在做实际工作,我会更改 getAllValues() 如下:
private String[] getAllValues() {
ExampleEnum[] values = values();
String[] result = new String[values.length];
for (int i = 0; i < values.length; i++) {
result[i] = values[i].someValue;
}
return result;
}
【问题讨论】: