如何使用反射调用 java 中 class 的 public 成员中的方法?

How to use reflection to invoke method in public members of a class in java?

Class答:

public class A {
    public B b;

    public A(String s) {
        b = new B(s);
    }
}

Class乙:

public class B {
    String s;

    public B(String s) {
        this.s = s;
    }

    public void printB() {
        System.out.println(this.s);
    }
}

所以我想在 java 中使用反射来创建 class A 并使用他的 public 成员 B 以便 运行 printB 方法使用反射来自客户端 'printB'

的给定字符串

我应该怎么做?

我不确定您为什么要这样做,但作为概念证明...

package myPackage;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {

    public static void main(String[] args) {
        try {
            Class clazz = Class.forName("myPackage.Test$a");
            Constructor con = clazz.getConstructor(String.class);
            Object instanceOfA = con.newInstance("A value");
            Field bField = clazz.getField("b");
            Object instanceOfB = bField.get(instanceOfA);
            Method printBMethod = instanceOfB.getClass().getMethod("printB");
            printBMethod.invoke(instanceOfB);
        } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchFieldException ex) {
            ex.printStackTrace();
        }
    }

    public static class a {

        public B b;

        public a(String s) {
            b = new B(s);
        }
    }

    public static class B {

        String s;

        public B(String s) {
            this.s = s;
        }

        public void printB() {
            System.out.println(this.s);
        }

    }
}