何时使用静态字段以及何时使用枚举?

时间:2015-01-30 15:30:34

标签: java enums

当你有一个固定值列表时,我倾向于为它定义一个枚举:

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也可以使用。通过枚举,您必须传递作为参数的内容。使用这种方法并避免枚举的原因是什么?

0 个答案:

没有答案