5

我有一个枚举类,它有几个常量,我想添加一些静态值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);

输出为“常规”。

4

1 回答 1

3

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

为了减少混淆,也许您应该创建focused()一个返回 GENERAL 的静态方法。这也将避免重新编译客户端代码的需要,以防您决定焦点类型是另一种类型。

于 2013-05-11T14:50:15.383 回答