像这样
import java.lang.reflect.Field;public class Test { public static void main(String... args) { try { Foobar foobar = new Foobar("Peter"); System.out.println("Name: " + foobar.getName()); Class<?> clazz = Class.forName("com.csa.mdm.Foobar"); System.out.println("Class: " + clazz); Field field = clazz.getDeclaredField("name"); field.setAccessible(true); String value = (String) field.get(foobar); System.out.println("Value: " + value); } catch (Exception e) { e.printStackTrace(); } }}class Foobar { private final String name; public Foobar(String name) { this.name = name; } public String getName() { return this.name; }}或者,您可以使用
newInstance类的方法在运行时获取对象的实例。您仍然需要首先设置该实例变量,否则它将没有任何值。
例如
Class<?> clazz = Class.forName("com.something.Foobar");Object object = clazz.newInstance();或者,在其构造函数中有两个参数的地方,例如String和int …
Class<?> clazz = Class.forName("com.something.Foobar");Constructor<?> constructor = clazz.getConstructor(String.class, int.class);Object obj = constructor.newInstance("Meaning Of Life", 42);或者您可以在运行时使用它为其构造函数查询
clazz.getConstructors()
注意:我特意省略了将在此创建的对象强制转换为预期的类型,因为那样会破坏反射的意义,因为如果您这样做的话,您已经知道该类了,这将消除对反射的需要。第一名。



