为什么variable2
的值为空,如果我使用Reflection API实例化类?如何使用反射api访问bean类的getter方法?
其中,Variable1
的值按照集合正确返回,这里我正常实例化对象。 如何使用ReflectionAPI
获得variable2
的值?
package com.OP.app;
public class Bean {
private String variable1;
private String variable2;
public String getVariable1() {
return variable1;
}
public void setVariable1(String variable1) {
this.variable1 = variable1;
}
public String getVariable2() {
return variable2;
}
public void setVariable2(String variable2) {
this.variable2 = variable2;
}
}
package com.OP.app;
import java.lang.reflect.Method;
public class ObjectCall {
public static void main(String []args){
Bean beanobject = new Bean();
beanobject.setVariable1("Ram");
beanobject.setVariable2("Rakesh");
System.out.println(beanobject.getVariable1());
String path = "com.OP.app.Bean";
Class<?> newClass;
try {
newClass = Class.forName(path);
Object obj = newClass.newInstance();
String getMethod = "getVariable2";
Method getNameMethod = obj.getClass().getMethod(getMethod);
String name = (String) getNameMethod.invoke(obj);
System.out.println(name);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // convert string classname to class
}
}
输出: 拉姆 空
这不起作用:'Class.forName'需要完整的类名,而不是包名。但是'Class > beanClazz = Bean.class;'无论如何都比较容易。 – CoronA
你说得对。这个bean类需要完整的类名(getName()这样做)。 'Class > beanClazz = Bean.class;'比较容易,但是如果只在运行时才知道类,那么硬编码类声明就无法做任何事情。 –