我如何使用 java 中的反射访问内部 class 变量值?

How i can access inner class variable value using reflection in java?

假设我有如下所示的 class 和多个内部 classes :

public class Constants {

    public class Class1 {
        public static final String IODATA = "IOData";
        public static final String HUB_INPUTS = "HubInputs";
    }

    public class Class2 {
        public static final String CLASS_INPUTS = "Class Inputs";
        public static final String AUXILIARIES_ON_BUTTON = "Auxiliaries On Button";
    }

    public class Class3 {
        public static final String CLASS_INPUTS = "Class Inputs";
        public static final String AUXILIARIES_ON_BUTTON = "Auxiliaries On Button";
    }
}

我想访问所有内部 class 变量然后我可以编写如下代码,我可以获得变量名称和值:

public static void getClassNameMap() throws Exception  {
    Constants cons = new Constants();
    Constants.Class1 class1 = cons.new Class1();
    for (Field fields : class1 .getClass().getFields())  {
      System.out.println(fields.get(projectObjectCons).toString() + "--" + fields.getName());
    }
}

但是我如何获得所有内部 classes 名称的字符串数组,例如:

String []arr = {"Class1","Class2","Class3"};

如何使用这些字符串 class 名称获取所有内部 class 变量和值??? 因为我无法使用其字符串名称创建 class 实例。 请帮帮我。

我相信您正在寻找这样的东西:

class Sample {

    public static void main(String arf[]) throws ClassNotFoundException {
        Class<?> clazz = Class.forName("C");
        Class<?>[] arr = clazz.getDeclaredClasses();
        System.out.println(arr.length);
        String[] classAsStrings = new String[arr.length];
        for (int i=0;i<arr.length;i++){
            classAsStrings[i] = arr[i].getSimpleName();
        }
        System.out.println(Arrays.toString(classAsStrings));
    }

}

class C {
    class Class1 {

    }

    class Class2 {

    }
}

O/P :

2
[Class1, Class2]
Class[] classes = Constants.class.getDeclaredClasses();     
    for(Class innerClass: classes){
        //System.out.println(innerClass.getName());
        Field[] fields = innerClass.getDeclaredFields();
        for(Field field : fields){
            //System.out.println(field.getName());
            //your implementation
        }           
    }

此代码将符合您的期望。

谢谢

也许这些片段就是您想要实现的...

    public static void main(String[] args)  {
        Class klass = Constants.class;
        Class[] cs = klass.getClasses();

        for(Class c : cs) {
            System.out.println(c.getName());
            Field[] fields = c.getDeclaredFields();
            for(Field f : fields) {
                try {
                    Object o = f.get(c);
                    System.out.println( "\t" + f.get(c).toString() + " -- " + f.getName());
                } catch (Exception e) {
                    // ignore others
                }
            }
        }
    }

如果您有 class 的字符串,您可以使用

Class klass = Class.forName("com.package.of.Constant");

希望对您有所帮助。