无法访问枚举初始化程序中的静态字段
在此代码中,我得到一个编译器错误,请参见注释:
public enum Type { CHANGESET("changeset"),
NEW_TICKET("newticket"),
TICKET_CHANGED("editedticket"),
CLOSED_TICKET("closedticket");
private static final Map<String, Type> tracNameMap = new HashMap<String, Type>();
private Type(String name) {
tracNameMap.put(name, this); // cannot refer to static field within an initializer
}
public static Type getByTracName(String tn) {
return tracNameMap.get(tracNameMap);
}
}
有没有一种方法可以使这项工作有效,可以Map
通过其中一个字段从a获取枚举值?
回答:
该地图在这里可能是过大的。除非您打算使用四个以上的枚举值,否则可以通过简单地遍历有效字符串并返回正确的字符串来实现getByTracName(String
tn)。如果映射键始终是枚举名称,则可以执行以下操作:
public enum Type {CHANGESET,
NEW_TICKET,
TICKET_CHANGED,
CLOSED_TICKET;
private static final Map<String, Type> tracNameMap = new HashMap<String, Type>();
static {
for (Type t:Type.values()) {
tracNameMap.put(t.name(), t);
}
}
public static Type getByTracName(String tn) {
return tracNameMap.get(tracNameMap);
}
}
或者您可以执行以下操作:
public static Type getByTracName(String tn) { return Enum.valueOf(Type.class,tn);
}
以上是 无法访问枚举初始化程序中的静态字段 的全部内容, 来源链接: utcz.com/qa/411707.html