Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java枚举到字符串映射保持一致性_Java_Enums - Fatal编程技术网

Java枚举到字符串映射保持一致性

Java枚举到字符串映射保持一致性,java,enums,Java,Enums,我是Java新手,正在为标题编写从枚举到字符串的映射 public class Header { // When adding HeaderType make sure it is consistent with the header name map public enum HeaderType { MARKER, WIDTH, ...... }; private String name; privat

我是Java新手,正在为标题编写从枚举到字符串的映射

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时,请确保它与header name映射一致
公共枚举头类型{
标记,
宽度,
......
};
私有字符串名称;
私有字符串值;
私人头型头型;
//创建头枚举到头名称的不可变映射
私有静态最终地图headernamap;
静止的{
Map headernamaptemp=newhashmap();
HeaderNameApTemp.put(HeaderType.MARKER,“MA”);
HeaderNameAPTemp.put(HeaderType.WIDTH,“WI”);
HeaderNameAP=集合。不可修改映射(HeaderNameApTemp);
}
公共标头(标头类型标头类型,字符串值){
this.headerType=headerType;
this.name=Header.getHeaderName(this.headerType);
这个值=值;
}
私有静态字符串getHeaderName(HeaderType HeaderType){
返回headerName.get(headerType);
}

在上面的代码中,我使用HeaderType enum并使用一个不可变的HashMap从enum转换为header name。正如您所看到的,添加另一个header类型也包括将其添加到映射中。因此,此类型的用户应确保它添加到两个位置,以避免以后出现混乱。它们是否有任何干净的替代方案用于此功能?

您可以在
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
values()
方法枚举所有类型/名称组合:

for (HeaderType headerType : HeaderType.values()) {
    System.out.println(headerType.getName());
}

运行示例:

您可以在
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
values()
方法枚举所有类型/名称组合:

for (HeaderType headerType : HeaderType.values()) {
    System.out.println(headerType.getName());
}
运行示例: