1

我已经在静态块中初始化了哈希映射,我需要访问哈希映射对象以在我的getExpo方法中使用它的键来获取值。

我的课在这里

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 回答