Java 使用反射获取HashMap
差不多吧。我在获取字符串变量的示例值方面没有问题,但我一直坚持使用这个。尝试用谷歌搜索,失败了。此外,如果可能的话,我希望在不实例化其类的情况下获取此映射。您唯一缺少的是处理以下对象的异常: Class.forNameFirst; clazz.getFieldMAP; field.getnull; 下面的代码从第一个类获取静态映射字段。这里我只是在main方法中抛出/传播异常,但是您应该相应地在try/catch块中处理异常Java 使用反射获取HashMap,java,reflection,hashmap,Java,Reflection,Hashmap,差不多吧。我在获取字符串变量的示例值方面没有问题,但我一直坚持使用这个。尝试用谷歌搜索,失败了。此外,如果可能的话,我希望在不实例化其类的情况下获取此映射。您唯一缺少的是处理以下对象的异常: Class.forNameFirst; clazz.getFieldMAP; field.getnull; 下面的代码从第一个类获取静态映射字段。这里我只是在main方法中抛出/传播异常,但是您应该相应地在try/catch块中处理异常 public class First { public fin
public class First {
public final static Map<String, String> MAP = new HashMap<>();
static {
MAP.put("A", "1");
MAP.put("B", "2");
}
}
public class Second {
public static void main(String[] args) {
Class<?> clazz = Class.forName("First");
Field field = clazz.getField("MAP");
Map<String, String> newMap = (HashMap<String, String>) field.get(null); // Obviously doesn't work
}
}
这里是一个非静态类的相同示例:
class First {
public final static Map<String, String> MAP = new HashMap<>();
static {
MAP.put("A", "1");
MAP.put("B", "2");
}
}
public class Second {
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException,
ClassNotFoundException, NoSuchFieldException, SecurityException {
Class<?> clazz = Class.forName("First");
Field field = clazz.getField("MAP");
Map<String, String> newMap = (HashMap<String, String>) field.get(null); // Obviously doesn't work
System.out.println(newMap); //Prints {A=1, B=2}
}
}
//显然不起作用-请在问题中包括编译错误。是的,事实证明,我只是有一个奇怪的想法。重新启动了它,现在一切正常。这里也有例外,我只是忘了写,因为在这里复制粘贴东西有问题
package at.noe.szb;
import static org.junit.Assert.assertEquals;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
public class ReflectionTest {
private class First {
public Map<String, String> MAP = new HashMap<>();
First(){
MAP.put("A", "1");
MAP.put("B", "2");
}
}
@Test
public void testMap() throws Exception {
Class<?> clazz = Class.forName("at.noe.szb.First");
Field field = clazz.getField("MAP");
Map<String, String> newMap = (HashMap<String, String>) field.get(clazz);
assertEquals("{A=1, B=2}", newMap.toString());
}
}