使用类型system声明Map字段



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

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

由于字段名带有非标准变量名(连字符(,通常使用更动态的映射,如

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

但我的问题是——有没有一种方法可以静态地声明哪些字段将存在于其中,而不仅仅是在运行时?

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

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);

然后,您的API可以使用addHeader(Headers h)等方法进行扩展,这使得在保持类型安全的同时静态限制选项成为可能。

否。只有一件事可以做,那就是在初始化后用默认值初始化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");
}
}

最新更新