当你有一个固定值列表时,我倾向于为它定义一个枚举:
public class Person {
public final Gender gender;
public Person(Gender gender) {
this.gender = gender;
}
}
public enum Gender {
MALE("male"),
FEMALE("female");
private final String value;
Gender(String value) {
this.value = value;
}
@Override
public String toString() {
return value;
}
}
但是我也看到过类似的东西,其中枚举值被实现为静态最终字段。
public class Person {
public static final String MALE = "male";
public static final String FEMALE = "female";
public final String gender;
public Person(String gender) {
// Check argument
this.gender = gender;
}
}
我已经看到Swing类经常使用第二种方法。例如,当您调用JFrame#setDefaultCloseOperation
时,您可以传递一个整数值作为参数,或者使用JFrame
类的一个静态成员。
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
为这些操作定义枚举是不是更好,因为不可能将任何整数作为参数传递给方法。除此之外,一些常量似乎是重复的,因为WindowConstants.DISPOSE_ON_CLOSE
也可以使用。通过枚举,您必须传递作为参数的内容。使用这种方法并避免枚举的原因是什么?