如何从文件中加载Java枚举元素的值
我有一个Java枚举:如何从文件中加载Java枚举元素的值,java,xml,properties,enums,Java,Xml,Properties,Enums,我有一个Java枚举: 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"), CUST
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);
非常感谢。如果我正确理解了您的问题,您需要在构造函数中这样做(在您的示例中,构造函数的名称错误) 您显示的硬编码默认值将用作默认值,但在构造函数中,您将检查/加载一些属性文件并覆盖它们 但总的来说,这是一个奇怪/糟糕的设计。您需要在枚举中硬编码该属性文件/资源。您还动态加载表示常量值的内容
看起来您真的应该使用自己的类来保存这些值。如果我正确理解您的问题,您需要在构造函数中这样做(在您的示例中,构造函数的名称错误) 您显示的硬编码默认值将用作默认值,但在构造函数中,您将检查/加载一些属性文件并覆盖它们 但总的来说,这是一个奇怪/糟糕的设计。您需要在枚举中硬编码该属性文件/资源。您还动态加载表示常量值的内容
看起来你真的应该使用自己的类来保存这些值。试试这样的方法
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
只是想和大家分享一些可能性。试试这样的
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
只是想分享一些可能性。枚举是一组常量。动态创建它没有多大意义。这可能是通过一些反射黑客来完成的,但我99%确信最好是重新设计。简言之:你不能。枚举应该是静态的。如果您需要一些动态功能,请使用例如
java.util.Properties
。感谢您的回答,知道这是不可能的,对我来说就足够了。@Hoang Nguyen huu只要检查我发布的答案,它可能会帮助您。.枚举是一组常量。动态创建它没有多大意义。这可能是通过一些反射黑客来完成的,但我99%确信最好是重新设计。简言之:你不能。枚举应该是静态的。如果你需要一些动态的东西,请使用例如java.util.Properties
。谢谢你的回答,知道这是不可能的对我来说就足够了。@Hoang Nguyen huu只要检查我发布的答案,它可能会帮到你。.嗨@Brian Roach我知道这是一个糟糕的设计,但是这是我能选择的最好的方式,所以用它我不必对代码做太大的更改。嗨@Brian Roach我知道这是一个糟糕的设计,但这是我能选择的最好的方式,所以用它我不必对代码做太大的更改。非常感谢@Sinto K Ittera,这是一个有趣的解决方案,我讨厌我没有足够的权限投票支持这个有用的答案。@Hoang Nguyen huu很高兴看到它帮助了你:)非常感谢@Sinto K Ittera,这是一个有趣的解决方案,我讨厌我没有足够的权限投票支持这个有用的答案。@Hoang Nguyen huu很高兴看到它帮助了你:)