文字列を整数に変換する静的ハッシュ テーブルを作成したいと考えています。ここでの注意点は、 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
メッセージは理にかなっていますが、理にかなっていないのは、静的ブロックからリソースに到達できないことです。静的変数はリソースを利用するためにカスタム作成されたと思われるでしょう。
オブジェクト コンストラクター中にハッシュ テーブルにデータを入力できると思いますが、これは間違った場所で行うことを意味します。