我有一个包含几个常量的枚举类,我想添加一些静态值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);
输出为“常规”。
答案 0 :(得分:3)
FOCUSED只是GENERAL的别名。它不会出现在枚举的values()
中,如果某些客户端代码使用FOCUSED,它实际上将使用GENERAL,因为两个变量都引用相同的枚举值。所以不,我不认为你搞砸了。
为了减少混淆,也许你应该使focused()
成为一个静态方法,它返回GENERAL。如果您确定焦点类型是另一个类型,这也可以避免重新编译客户端代码的需要。