艾姆:我刚做了一些不需要的事吗?

时间:2013-05-11 14:43:25

标签: java enums

我有一个包含几个常量的枚举类,我想添加一些静态值FOCUSED,它表示哪个枚举值有焦点...

我找到了一种方法:

package messagesystem;

/**
 *
 * @author Frank
 */
public enum MessageType {
    ALL,
    GENERAL,
    SEND,
    RECEIVE,
    LOG,
    EXCEPTION,
    DEBUG,
    PM;

    public final static MessageType FOCUSED = GENERAL;

    private final String value;

    MessageType() {
        String firstLetter = name().substring(0, 1);
        String otherLetters = name().substring(1, name().length());
        this.value = firstLetter.toUpperCase() + otherLetters.toLowerCase();
    }

    @Override
    public String toString() {
        return value;
    }
}

然而,现在我想知道:我是否只是搞乱了枚举类?因为我不希望在指定消息类型时可以选择FOCUSED,但处理枚举MessageType的类应该能够确定FOCUSED值...这样我不需要在每个班级都进行核心训练。

任何想法都表示赞赏。

编辑:虽然行为正常。 此代码给出了预期的输出:

    this.focused = MessageType.FOCUSED.toString();
    System.out.println(focused);

输出为“常规”。

1 个答案:

答案 0 :(得分:3)

FOCUSED只是GENERAL的别名。它不会出现在枚举的values()中,如果某些客户端代码使用FOCUSED,它实际上将使用GENERAL,因为两个变量都引用相同的枚举值。所以不,我不认为你搞砸了。

为了减少混淆,也许你应该使focused()成为一个静态方法,它返回GENERAL。如果您确定焦点类型是另一个类型,这也可以避免重新编译客户端代码的需要。