2

我想在 Enum 中声明静态(或非静态)变量。我需要这个,因为我想将枚举值与一些字符串相关联。但我不想硬编码这个字符串。我想将我的应用程序范围的类与字符串常量一起使用。即我想在enum声明中这样写,但是有编译时错误:

public enum MyEnum {   
        private static final AppConstants CONSTANTS = AppConstants.getInstance();

        ONE(CONSTANTS.one()),
        TWO(CONSTANTS.two());
}

我如何将枚举放入一个字段?

4

3 回答 3

4

这是限制之一,必须首先指定枚举值,您始终可以在每个实例化中引用相同的单例......

enum MyEnum {

    ONE(Test.getInstance().one()),
    TWO(Test.getInstance().two());

    public final String val;

    MyEnum(String val) { this.val = val; }
}

输出“hello”的示例:

public class Test {
    public static void main(String[] args) {
        System.out.println(MyEnum.ONE.val);
    }

    public String one() {
        return "hello";
    }
    public String two() {
        return "world" ;
    }

    static Test instance;
    public synchronized static Test getInstance() {
        if (instance == null)
            instance = new Test();
        return instance;
    }
}
于 2012-04-05T12:11:09.127 回答
3

这有点骇人听闻。但是你必须AppConstants稍微改变你的班级。

public enum MyEnum {   
    ONE(getConstant("one")),
    TWO(getConstant("one"));

    private static final AppConstants CONSTANTS = AppConstants.getInstance();

    private static String getConstant(String key) {
        // You can use a map inside the AppConstants or you can 
        // invoke the right method using reflection. Up to you.
        return CONSTANTS.get(key);
    }

    private MyEnum(String value) {

    }
}
于 2012-04-05T12:12:39.797 回答
2

枚举常量需要是枚举中的第一个元素

public enum MyEnum {   

    ONE,TWO;
    private static final AppConstants CONSTANTS = AppConstants.getInstance();

    @Override 
public String toString() {
       if(this==ONE){
           return CONSTANTS.one();
       } else if(this==TWO){
           return CONSTANTS.two();
       }
    return null;
}
}
于 2012-04-05T12:08:13.957 回答