import java.lang.reflect.Field;public class Test { public static void main(String[] args) throws SecurityException, NoSuchFieldException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException {
A test=new A();
test.getC();
}}
class A{
public String a="aaaaaaaashort";
private String b="short";
public String getC() throws SecurityException, NoSuchFieldException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException{
B b=new B();
return b.getthisC();
}

}
class B{
public String c="ccccccccc";
public String getthisC() throws ClassNotFoundException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
StackTraceElement stack[] = Thread.currentThread().getStackTrace();
System.out.println(stack[1].getClassName());
Class ownerClass1 = Class.forName(stack[1].getClass().getName());
Field f = ownerClass1.getDeclaredField("c");
  Object fv = f.get(ownerClass1);
System.out.println(fv.toString());
return c;
}

}
如何获取到b实例对象,获取到b实例中的c属性?java反射

解决方案 »

  1.   

     public static String c = "ccccccccc";
     Class ownerClass1 = Class.forName(stack[1].getClassName());
    stack[1]是StackTraceElement的类对象,你之前得到的类就不是B了
    Object fv = f.get(ownerClass1);
    这句你用Class直接传参,那你的String就要声明为类对象,
    要不你就把ownerClass1替换成ownerClass1.newInstance()
      

  2.   

    哦,原来这是static的原因啊,ownerClass1没有实例化,所以就没有c的值。谢啦。