Есть ли разумный способ ссылаться на ресурсы приложений (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; } } 

Этот вопрос относится к любой статической инициализации.

Solutions Collecting From Web of "Есть ли разумный способ ссылаться на ресурсы приложений (R.string …) в статических инициализаторах"

Я не думаю, что существует прямой путь, поскольку контекст необходим для загрузки ресурсов. Однако то, что вы могли бы сделать, это предоставить метод в вашем перечислении для получения требуемой строки после того, как контекст будет доступен. Что-то вроде

 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);