Java 使用反射获取HashMap

Java 使用反射获取HashMap,java,reflection,hashmap,Java,Reflection,Hashmap,差不多吧。我在获取字符串变量的示例值方面没有问题,但我一直坚持使用这个。尝试用谷歌搜索,失败了。此外,如果可能的话,我希望在不实例化其类的情况下获取此映射。您唯一缺少的是处理以下对象的异常: Class.forNameFirst; clazz.getFieldMAP; field.getnull; 下面的代码从第一个类获取静态映射字段。这里我只是在main方法中抛出/传播异常,但是您应该相应地在try/catch块中处理异常 public class First { public fin

差不多吧。我在获取字符串变量的示例值方面没有问题,但我一直坚持使用这个。尝试用谷歌搜索,失败了。此外,如果可能的话,我希望在不实例化其类的情况下获取此映射。

您唯一缺少的是处理以下对象的异常:

Class.forNameFirst; clazz.getFieldMAP; field.getnull; 下面的代码从第一个类获取静态映射字段。这里我只是在main方法中抛出/传播异常,但是您应该相应地在try/catch块中处理异常

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