1

静的ブロック内でハッシュ マップを初期化しましたgetExpo。メソッド内でキー it を使用して値を取得するには、ハッシュ マップ オブジェクトにアクセスする必要があります。

私のクラスはここに行きます

public class ExampleFactory {
  static
  {
    HashMap<String,Class<?>> hmap = new HashMap<String,Class<?>>();

    hmap.put("app", application.class);
    hmap.put("expo", expession.class);
  }

  public void getExpo(String key,String expression)
  {
    // I need to access the object in static block

    Class aclass=hmap.get(key); // it works when i place it inside main method but
                                // not working when i place the create object for
                                // Hashmap in static block

    return null;
  }
}
4

2 に答える 2

2

変数をクラスの静的メンバーとして宣言してから、静的ブロックに入力します。

public class ExampleFactory
{
  // declare hmap
  static HashMap<String,Class<?>> hmap = new HashMap<String,Class<?>>();
  static
  {
    // populate hmap
    hmap.put("app", application.class);
    hmap.put("expo", expession.class);

  }
  //...
}

この後、クラス内からアクセスできます。

静的ブロック内の変数を削除すると、そのブロックの外部から変数にアクセスできなくなります。クラスのメンバーとして宣言すると、クラスからアクセスできるようになります。

于 2012-04-04T20:18:52.467 に答える
1

hmap変数をクラスの静的メンバーにする必要があります。

public class YourClass {
   private static Map<String, Class<?>> hmap = new HashMap<String, Class<?>>();

   static {
      // what you did before, but use the static hmap
   }

   public void getExpo(...){
       Class aClass = YourClass.hmap.get(key);
   }

}

現状では、静的ブロックで宣言しているので、静的ブロックが実行されると失われます。

hmap複数のインスタンスが同時にマップを変更する可能性があるため、へのアクセスが同期されているか、スレッドセーフであることを確認する必要があることに注意してください。それが理にかなっている場合は、hmapファイナルを作成することもできます。

于 2012-04-04T20:16:59.170 に答える