我在静态块中初始化了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;
}
}
答案 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);
}
//...
}
在此之后,您可以从班级内部访问它。
在静态块中隐藏变量使得它无法从该块外部访问。将它声明为类的成员使得它可以被类访问。