声明类型为system

时间:2018-11-17 07:37:44

标签: java

在Java中,我有一个代表http标头的类:

 public class Headers {
       String 'x-requested-by' = "foo";
       String 'content-type' = "application/json"
 }

由于字段名称带有非标准的变量名称(连字符),因此通常使用更具动态性的映射,如下所示:

    Map<String, String> map = new HashMap<String, String>();

但是我的问题是-是否有一种方法可以声明静态存在哪些字段,而不是仅在运行时声明?

2 个答案:

答案 0 :(得分:2)

您可以使用枚举映射,该映射仅接受指定枚举类型的键,而枚举本身将静态限制选项。

enum Headers {
    X_REQUESTED_BY("x-requested-by"), CONTENT_TYPE("content-type");

    private String headerName;

    private Headers(String n) {
        this.headerName = n;
    }

    public String getHeaderName() {
        return headerName;
    }
}

并使用枚举映射存储值:

Map<Headers, String> headerValues = new EnumMap<>(Headers.class);

然后可以使用addHeader(Headers h)之类的方法扩展您的API,从而可以静态限制选项,同时保持其类型安全。

答案 1 :(得分:1)

不。您只能做的一件事就是初始化后使用默认值初始化Map

public class Header {
     public static final String X_REQUESTED_BY = "x-requested-by";
     public static final String CONTENT_TYPE = "content-type";

     private final Map<String, String> map = new HashMap<String, String>();

     {
         map.put(X_REQUESTED_BY, "foo");
         map.put(CONTENT_TYPE, "application/json");
     }
 }