我有一个Java Enum:
public enum CodeType {
BRONZE("00001BP", "BAP"),
SILVER("00002SL", "SAP"),
GOLD("00003GL", "GAP"),
MOBILE("00004MB", "TCM"),
SOCIAL("00005SM", "ASM"),
WEB_PRESENCE("00006WP", "GLO"),
EMAIL_MARKETING("00007EM", "PEM"),
CUSTOM_DIAMOND("00008CD", "PCS"),
CONSUMER_PORTAL("00009CP", "CPS");
private String code;
private String key;
CodeType(String code, String key) {
this.code = code;
this.key = key;
}
...
}
如您所见,我有九个元素,每个元素都有两个值。我的问题是如何从属性或xml等文件中加载这些元素的值?我的意思是:
BRONZE(isLoadedFromFile, isLoadedFromFile),
...
CONSUMER_PORTAL(isLoadedFromFile, isLoadedFromFile);
非常感谢。
答案 0 :(得分:9)
尝试这样的事情......
public enum EnumTest {
BRONZE, SILVER;
public String getProperty(String keyOrCode) {
Properties prop = new Properties();
try {
prop.load(new FileInputStream("E:\\EnumMapper.properties"));
} catch (Exception e) {
e.printStackTrace();
}
return prop.getProperty(this.name() + "." + keyOrCode);
}
public String getCode() {
return getProperty("CODE");
}
public String getKey() {
return getProperty("KEY");
}
public static void main(String[] args) {
System.out.println(EnumTest.BRONZE.getCode());
System.out.println(EnumTest.BRONZE.getKey());
}
}
EnumMapper.properties包含
BRONZE.CODE=00001BP
BRONZE.KEY=BAP
SILVER.CODE=00002SL
SILVER.KEY=SAP
只是想分享一些可能性..
答案 1 :(得分:0)
如果我正确理解了您的问题,您需要在构造函数中执行此操作(在您的示例中将其命名为错误)。
您显示的硬编码默认值将作为默认值,但在构造函数中,您将检查/加载某些属性文件并覆盖它们。
总的来说,这有点奇怪/糟糕的设计。您需要在枚举中对该属性文件/资源进行硬编码。您还可以动态加载表示常量值的内容。
看起来你应该使用自己的类来保存这些值。
答案 2 :(得分:0)
一种选择是基于枚举类中的资源文件生成静态映射,从枚举值映射到文件中的数据。然后可以将映射用于 getter。
例如一个资源文件格式如下:
A=red
B=blue
C=yellow
它可以像这样初始化:
public enum MyEnum {
A, B, C;
public String getFoo() {
return enumFooValuesFromResourceFile.get(this);
}
private static final Map<MyEnum, String> enumFooValuesFromResourceFile;
static {
Map<MyEnum, String> temp = Collections.emptyMap();
try {
String data = new String(MyEnum.class.getResourceAsStream("resourcepath").readAllBytes());
temp = Arrays.stream(data.split("\n"))
.map(line -> line.split("="))
.collect(Collectors.<String[], MyEnum, String>toMap(
key_val -> MyEnum.valueOf(key_val[0]),
key_val -> key_val[1]));
} catch (IOException iE) {
// helpful message.
} finally { enumFooValuesFromResourceFile = temp; }
}
}