实现枚举来管理Java常量的正确方法是什么?

时间:2013-01-09 17:25:59

标签: java enums

在做了一些研究后,我发现从java 1.5开始,最好管理在“常量”类中声明的枚举中的常量(或键属性)。

我想知道实现这些枚举的正确方法是什么,以尽可能简单地获取枚举元素的值,无论其类型如何。

示例:消息是否可以具有“Constant.Messages.WARNING”的值:

public enum Messages {

    WARNING("main.message.warning")

}

谢谢。

5 个答案:

答案 0 :(得分:3)

您可以通过实施一些方法来实现。你需要一个构造函数和一个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();

答案 1 :(得分:3)

您可以将Java中的枚举自定义为其他类,只有少数例外。

我将使用相同的示例,但它使用toString而不使用getMessage,因此您可以在调用toString的位置使用枚举(例如,在{{1}或者任何记录方法)。

System.out.println

答案 2 :(得分:2)

public enum Messages {

    WARNING("main.message.warning")
    private String message;
    Messages(String message) {
        this.message = message
    }
    String getMessage() {
        return this.message;
    }
}

,毕竟你可以

Messages.WARNING.getMessage()

答案 3 :(得分:2)

是的,但在这种情况下,此"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启动时调用的;当你的程序“准备就绪”时,枚举值就在那里。

答案 4 :(得分:0)

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; }
}