无法访问枚举初始化程序中的静态字段

在此代码中,我得到一个编译器错误,请参见注释:

 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

回到顶部