Я хочу создать таблицу static Hash для преобразования строк в целые числа. Оговорка здесь в том, что я хочу использовать строки, которые я определил как ресурсы в нескольких списках в XML файлах.
Я могу написать это, используя только идентификаторы ресурсов:
public class MyActivity extends Activity {
private static Map<Integer, Integer> views = new HashMap<Integer, Integer>();
static {
views.put(R.string.full_text, MessageTable.VIEW_FULL);
views.put(R.string.only_text, MessageTable.VIEW_MSG);
views.put(R.string.tag_text, MessageTable.VIEW_TAGMSG);
}
Я не получаю ошибок, но мне действительно нужно сделать что-то вроде этого:
public class MyActivity extends Activity {
private static Map<String, Integer> views = new HashMap<String, Integer>();
static {
views.put(getResources().getString(R.string.full_text), MessageTable.VIEW_FULL);
views.put(getResources().getString(R.string.only_text), MessageTable.VIEW_MSG);
views.put(getResources().getString(R.string.tag_text), MessageTable.VIEW_TAGMSG);
}
который дает мне следующую ошибку в Eclipse:
Cannot make a static reference to the non-static method getResources() from the type ContextWrapper
Сообщение имеет смысл, но нет смысла в том, что ресурсы недоступны из статического блока, можно было бы подумать, что статические переменные были созданы пользователем для использования ресурсов.
Наверное, я могу заполнить таблицу Hash во время конструктора объекта, но это означало бы сделать это не в том месте.