像这样……
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()在运行时查询其构造函数
NB我故意省略了在这里创建的对象的转换为预期的类型,因为这会破坏反射点,因为如果你这样做,你已经知道了类,这将否定反射的必要性.第一名.