是否有一种明智的方式在静态初始值设定项中引用应用程序资源R.string…

问题描述

|| 有没有一种明智的,干净的方法可以从我的android类中的静态初始化代码中引用应用程序资源。 我特别想定义一个枚举,其常量中包含一些资源字符串的值。 这是枚举的一些伪代码
private enum MyEnum {
    Const1(getString(R.string.string1)),Const2(getString(R.string.string2)),Const3(getString(R.string.string3));

    private String strVal;

    MyEnum(String strVal){
        this.strVal = strVal;
    }
}
这个问题适用于任何类型的静态初始化。     

解决方法

        我认为没有直接方法,因为需要上下文来加载资源。但是,您可以做的是在枚举中提供一种方法,以便在上下文可用时获取所需的字符串。就像是
private enum MyEnum {
    Const1(R.string.string1),Const2(R.string.string2),Const3(R.string.string3);

    private int resId;

    MyEnum(int resId){
        this.resId = resId;
    }

    public String resource(Context ctx) {
       return ctx.getString(resId);
    }
}
所以你像访问它
String val = Const3.resource(context);
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...