我想创建一个静态哈希表来将字符串转换为整数。这里需要注意的是,我想在XML 文件的几个列表中使用我定义为资源的字符串。
我可以写这个,只使用资源 ID:
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
该消息是有道理的,但没有意义的是静态块无法访问资源,人们会认为静态变量是自定义创建的以利用资源。
我想我可以在对象构造函数期间填充哈希表,但这意味着在错误的地方进行。