在Java中,我有一个代表http标头的类:
public class Headers {
String 'x-requested-by' = "foo";
String 'content-type' = "application/json"
}
由于字段名称带有非标准的变量名称(连字符),因此通常使用更具动态性的映射,如下所示:
Map<String, String> map = new HashMap<String, String>();
但是我的问题是-是否有一种方法可以声明静态存在哪些字段,而不是仅在运行时声明?
答案 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");
}
}