我想在我的一个类上访问一个静态HashMap对象。这个伪代码说明了我是如何尝试的。
public Class A
{
public static HashMap<String,String> myMap;
static
{
myMap.put("my key", "my value");
}
}
...
public void myfunction(Class clazz)
{
HashMap<String,String> myMap = clazz.getThatStaticMap();
}
...
myFunction(A.getClass());
对getThatStaticMap()
的调用是我不知道该怎么做的部分。
在我的实际代码中,我使用类作为参数调用myfunction
并返回使用类的newInstance()方法创建的ArrayList
个对象但我想要访问属于该静态数据的对象到类来配置每个实例。
答案 0 :(得分:5)
如果我理解正确,您希望使用reflection来访问该字段。您可以使用Class#getField或Class#getDeclaredField访问地图,如下所示:
Field hashmapField = clazz.getField("myMap");
//Note, since this is static, we pass it null.
Object fieldValue = hashmapField.get(null);
HashMap<String,String> myMap = (HashMap<String,String>)fieldValue;
但是,如果您有几个类将具有“myMap”字段,您可以考虑重构代码以使interface像这样:
public interface StringMappable{
HashMap<String,String> getMap();
}
而不是使用反射。
答案 1 :(得分:3)
答案 2 :(得分:2)
你想要这样的东西:
public void myfunction(Class clazz)
{
HashMap<String,String> myMap = clazz.getField("myMap").get(null);
}
Field.get(Object)
method docs say:
如果底层字段是静态字段,则忽略obj参数;它可能是null。
Class.getField(String)
method docs say:
返回一个Field对象,该对象反映此Class对象所表示的类或接口的指定公共成员字段。 name参数是一个String,指定所需字段的简单名称。