Java枚举:封装和运行时初始化

Java枚举:封装和运行时初始化,java,enums,Java,Enums,在回家的路上我有一个有趣的问题 我有一个枚举 public enum Gender{ Yes(Constants.male()), female(Constants.female()); private final String value; private Gender(String option){ value = option; } } 。。我应该封装该值还是将其声明为公共值 运行时初始化值有缺点吗?在您的情况下,应该没有太大区别

在回家的路上我有一个有趣的问题

我有一个枚举

public enum Gender{

    Yes(Constants.male()), female(Constants.female());

    private final String value;

    private Gender(String option){
          value = option;
    }
}
。。我应该封装该值还是将其声明为公共值


运行时初始化值有缺点吗?

在您的情况下,应该没有太大区别,
字符串
类是不可变的。但是,由于封装是一种良好的做法,因此建议使用这种方法

至于“运行时”init,我不知道你的意思。枚举本质上是单例的,所以在类加载时将初始化它。这是在运行时,是的,但没有缺点;尤其是如果您不想硬编码这些值

编辑


正如@GyroGearless指出的,该字段应声明为
final
,这是最佳做法,即使它不是
public
,因为它是构造函数中设置的常量。

Ha<代码>性别.是->男性
女性
?构造函数名为
Option
而不是
Gender
?对不起,应该是Gender=xAlas,字符串是不可变的,但值字段不是!如果公开,则应宣布为“最终公开”!我还更喜欢使用getter封装字段,以便与广泛接受的最佳实践更加一致。如果是
public
,那么好的观点应该是
final