在做了一些研究之后,我发现从 java 1.5 开始,最好在枚举中管理在“常量”类中声明的常量(或关键属性)。
我想知道实现这些枚举的正确方法是什么,以尽可能简单地获取枚举元素的值,无论其类型如何。
示例:是否可以具有“Constant.Messages.WARNING”的值,其中 Messages 是:
public enum Messages {
    WARNING("main.message.warning")
}
谢谢你。
您可以通过实现一些方法来做到这一点。您将需要一个构造函数和一个 getter:
public enum Messages {
    WARNING("main.message.warning");
    private String message;
    Messages (String message) { this.message = message; }
    public String get() { return this.message; }
}
现在你可以写:
String msg = Messages.WARNING.get();
您可以将枚举自定义为 Java 中的其他类,但很少有例外。
我将使用相同的示例,但它使用toStringwithout getMessage,因此您可以在toString调用的地方(例如 inSystem.out.println或任何日志记录方法)使用枚举。
public enum Messages
{
    WARNING("main.message.warning"),
    ERROR("main.message.error");
    private final String message;
    // Parameters to the enum constructors are the ones in the enum "definition"
    Messages(final string message)
    {
        this.message = message;
    }
    @Override
    public String toString()
    {
        return message;
    }
}
public enum Messages {
    WARNING("main.message.warning")
    private String message;
    Messages(String message) {
        this.message = message
    }
    String getMessage() {
        return this.message;
    }
}
毕竟你可以
Messages.WARNING.getMessage()
是的,但在这种情况下,这"main.message.warning"是枚举的一个实例成员:
public enum Messages
{
    WARNING("main.message.warning"),
    ERROR("main.message.error");
    private final String message;
    // Parameters to the enum constructors are the ones in the enum "definition"
    Messages(final string message)
    {
        this.message = message;
    }
    public String getMessage()
    {
        return message;
    }
}
还要注意,所有这些构造函数都是在 JVM 启动时调用的;当您的程序“准备就绪”时,枚举值都在那里。
Java 编译器在幕后做了一些魔术,所以enum当你遇到它们时会觉得有点奇怪。您可以使用私有构造函数添加任意附加数据,例如:
public enum Messages {
    WARNING("main.message.warning");
    private final String key;
    private Messages(String key) { this.key = key; }
    public String getKey() { return key; }
}