如果我使用Reflection API实例化类,为什么variable2
的值为null?
其中,Variable1
的值按照集合正确返回,这里我正常实例化对象。
如何使用variable2
获取ReflectionAPI
的值?
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
}
}
输出: 内存 空
答案 0 :(得分:0)
这是因为您在新创建的对象(例如obj
)上调用该方法,该方法没有为variable1
和variable2
设置值,例如:
Object obj = newClass.newInstance();
以上内容将创建Object
个Bean
个新类variable1
和variable2
的空值。如果要打印beanobject
方法中设置的值,则需要使用beanobject
调用getter方法。即改变
String name = (String) getNameMethod.invoke(obj);
到
String name = (String) getNameMethod.invoke(beanobject);
答案 1 :(得分:0)
您创建了一个没有设置值的目标类的新实例。
Object obj = newClass.newInstance();
Method getNameMethod = obj.getClass().getMethod(getMethod);
更改此行,它应该有效:
Method getNameMethod = beanobject.getClass().getMethod(getMethod);
其他: 你的变量命名不是很好。为了更好的阅读,我会重构代码:
public static void main(String[] args) {
Bean beanInstance = new Bean();
beanInstance.setVariable1("Ram");
beanInstance.setVariable2("Rakesh");
System.out.println("Value 1 of fresh bean instance: " + beanInstance.getVariable1());
String beanType = Bean.class.getName();
Class<?> beanClazz;
try {
beanClazz = Class.forName(beanType);
String getterMethodName = "getVariable2";
Method getterMethod = beanClazz.getMethod(getterMethodName);
Object returnValue = getterMethod.invoke(beanInstance);
System.out.println("Value 2 of by reflection loaded bean instance: " + String.valueOf(returnValue));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // convert string classname to class
}