如何使用反射调用 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);
}
}
}
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);
}
}
}