如何访问静态块内的对象

时间:2012-04-04 20:13:04

标签: hashmap predicate

我在静态块中初始化了Hashmap,我需要访问hashmap对象以使用我的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;
  }
}

2 个答案:

答案 0 :(得分: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最终。

答案 1 :(得分:1)

将变量声明为类的静态成员,然后在静态块中填充它:

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);

  }
  //...
}

在此之后,您可以从班级内部访问它。

在静态块中隐藏变量使得它无法从该块外部访问。将它声明为类的成员使得它可以被类访问。