贴一段代码给lz import java.lang.reflect.*;class AA { private int i= 10; }class BB extends AA { private int i= 8; }class CC extends BB { private int i = 6; }public class Test { public Test() { } public static void main(String[] args) throws Exception{ CC o = new CC(); Class c = o.getClass(); Class b = c.getSuperclass(); Class a = b.getSuperclass(); Field ci = c.getDeclaredField("i"); Field bi = b.getDeclaredField("i"); Field ai = a.getDeclaredField("i"); ci.setAccessible(true); bi.setAccessible(true); ai.setAccessible(true); System.out.println(ci.getInt(o)); System.out.println(bi.getInt(o)); System.out.println(ai.getInt(o)); } }
然后Method或者Field 的.setAccessible()要设置为true
才能够调用或者设置读取值
怎么指定??
谢谢le !!!
我怎么样才可以指定访问private的属性呢???
import java.lang.reflect.*;class AA
{
private int i= 10;
}class BB extends AA
{
private int i= 8;
}class CC extends BB
{
private int i = 6;
}public class Test {
public Test() {
}
public static void main(String[] args) throws Exception{
CC o = new CC(); Class c = o.getClass();
Class b = c.getSuperclass();
Class a = b.getSuperclass(); Field ci = c.getDeclaredField("i");
Field bi = b.getDeclaredField("i");
Field ai = a.getDeclaredField("i"); ci.setAccessible(true);
bi.setAccessible(true);
ai.setAccessible(true); System.out.println(ci.getInt(o));
System.out.println(bi.getInt(o));
System.out.println(ai.getInt(o));
}
}
我的意思其实是指定private修饰符修饰的属性访问!只要是private修饰的属性都访问,跳过其他修饰符!
抱歉!我说的不是很清楚!!