我是Java新手,正致力于为标题编写Enum to String Map。
public class Header {
// When adding HeaderType make sure it is consistent with the header name map
public enum HeaderType {
MARKER,
WIDTH,
......
};
private String name;
private String value;
private HeaderType headerType;
// Create an immutable map for header enum to header names
private static final Map<HeaderType, String> headerNameMap;
static {
Map<HeaderType, String> headerNameMapTemp = new HashMap<HeaderType, String>();
headerNameMapTemp.put(HeaderType.MARKER, "MA");
headerNameMapTemp.put(HeaderType.WIDTH, "WI");
headerNameMap = Collections.unmodifiableMap(headerNameMapTemp);
}
public Header(HeaderType headerType, String value) {
this.headerType = headerType;
this.name = Header.getHeaderName(this.headerType);
this.value = value;
}
private static String getHeaderName(HeaderType headerType) {
return headerName.get(headerType);
}
在上面的代码中,我使用了HeaderType枚举,并使用不可变的HashMap将枚举转换为头名。正如您所看到的,添加另一个标题类型也会将其添加到地图中。因此,用户应确保将其添加到两个地方以避免以后出现任何混乱。他们是否有这种功能的干净选择?
答案 0 :(得分:6)
您可以将标题名称设为enum
本身的字段,如下所示:
public enum HeaderType {
MARKER("MA"),
WIDTH("WI");
// FOO(), BAR; Won't compile
private final String name;
private HeaderType(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
这样一来,如果不指定相应的名称,就无法添加新的HeaderType
,而getHeaderName
方法可以简单地替换为getName()
的调用。
您可以使用enum
&#39; values()
方法枚举所有类型/名称组合:
for (HeaderType headerType : HeaderType.values()) {
System.out.println(headerType.getName());
}
正在运行示例:https://ideone.com/B5LwQz