怎样通过反射获得一个类的属性值或者方法返回值

时间:2022-04-15 00:29:45
  新建了一个TestReflect类ref。ref.length=1,ref.wight=2.
  但是为什么利用反射获得length还是默认值0啊?
  附代码,请各位大神指导

package reflect;

import java.lang.reflect.Method;

public class ReflectTest {
public static void main(String[] args) {
TestReflect ref=new TestReflect();
ref.setLength(1);
ref.setWight(2);

try {
Class<?> obj=Class.forName(ref.getClass().getName());
Object object = obj.newInstance();
Method method=obj.getMethod("getLength");
System.out.println(method.invoke(object));
} catch (Exception e) {
e.printStackTrace();

}
}


class TestReflect{

int length;
int wight;

TestReflect(){

}

public int getLength() {
return length;
}

public void setLength(int length) {
this.length = length;
}

public int getWight() {
return wight;
}

public void setWight(int wight) {
this.wight = wight;
}



}

3 个解决方案

#1


Class<?> obj=Class.forName(ref.getClass().getName());
            Object object = obj.newInstance();
            Method method=obj.getMethod("getLength");

你这样拿到的是你newInstance新构建的对象,又不是你之前设定了值的对象,域当然会是0.

应该是这样:method.invoke(ref)

#2


引用 1 楼 ygycomon 的回复:
Class<?> obj=Class.forName(ref.getClass().getName());
            Object object = obj.newInstance();
            Method method=obj.getMethod("getLength");

你这样拿到的是你newInstance新构建的对象,又不是你之前设定了值的对象,域当然会是0.

应该是这样:method.invoke(ref)
CSDN果然厉害,出现的第一个人就是高手,百度了好多reflect教程都没有指出这个问题,再次感谢

#3


顺便说一句,刚才引用的代码都没用,这样写会比较好


Class<?> clazz = ref.getClass();
Method method=clazz.getMethod("getLength");
System.out.println(method.invoke(ref));

#1


Class<?> obj=Class.forName(ref.getClass().getName());
            Object object = obj.newInstance();
            Method method=obj.getMethod("getLength");

你这样拿到的是你newInstance新构建的对象,又不是你之前设定了值的对象,域当然会是0.

应该是这样:method.invoke(ref)

#2


引用 1 楼 ygycomon 的回复:
Class<?> obj=Class.forName(ref.getClass().getName());
            Object object = obj.newInstance();
            Method method=obj.getMethod("getLength");

你这样拿到的是你newInstance新构建的对象,又不是你之前设定了值的对象,域当然会是0.

应该是这样:method.invoke(ref)
CSDN果然厉害,出现的第一个人就是高手,百度了好多reflect教程都没有指出这个问题,再次感谢

#3


顺便说一句,刚才引用的代码都没用,这样写会比较好


Class<?> clazz = ref.getClass();
Method method=clazz.getMethod("getLength");
System.out.println(method.invoke(ref));