Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从文件中加载Java枚举元素的值_Java_Xml_Properties_Enums - Fatal编程技术网

如何从文件中加载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

我有一个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"),
  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很高兴看到它帮助了你:)