作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个枚举类,它有几个常量,我想添加一些静态值 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
value...这样我就不需要在每个类中都硬核它。
如有任何想法,我们将不胜感激。
编辑:虽然它的行为是正确的。此代码给出了预期的输出:
this.focused = MessageType.FOCUSED.toString();
System.out.println(focused);
输出是“一般”。
最佳答案
FOCUSED 只是 GENERAL 的别名。它不会出现在枚举的 values()
中,如果某些客户端代码使用 FOCUSED,它实际上会使用 GENERAL,因为两个变量都引用相同的枚举值。所以不,我不认为你搞砸了。
为了减少混淆,也许您应该使 focused()
成为一个返回 GENERAL 的静态方法。如果您决定关注的类型是另一种类型,这也可以避免重新编译客户端代码的需要。
关于java - 枚举 : Did I just do something unwanted?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16498277/
我是一名优秀的程序员,十分优秀!