我可以访问小部件,文本对象的私有字段吗?

时间:2013-03-02 14:02:01

标签: java reflection

我已经阅读了很多关于反射的帖子,所有的例子都只是string,double和int等的简单访问对象。 但是,我想访问像Widget,Text甚至是自定义对象这样的对象。 我尝试与字符串相同的方式,但它失败了。

例如

class testPrivate{
    public boolean test()
    {
        return true;
    }

}

class button {
public button(){
    anc=new testPrivate();
}
    private testPrivate anc;

}


public class Testing {

    public static void main(String arg[]) throws Throwable{
    button bt=new button();
    Field field = bt.getClass().getDeclaredField("anc");
    field.setAccessible(true);
    System.out.println(field.test());
    }

}

这里,语句System.out.println(field.test())中的field.test();失败。

1 个答案:

答案 0 :(得分:0)

Field是一个引用类型字段的类,而不是该类的任何特定实例。

为了调用方法,首先需要该类的实例,然后必须确保anc不为null。

示例:

button bt=new button();
Field field = bt.getClass().getDeclaredField("anc");
field.setAccessible(true);

//This sets the field value for the instance "bt"
field.set(bt, new testPrivate());

然后,为了调用该方法,您需要获取该对象并在该对象上调用该方法:

//Since field corresponds to "anc" it will get the value
//of that field on whatever object you pass (bt in this example).
testPrivate tp = (testPrivate) field.get(bt);
System.out.println(tp.test());

同样在风格上,类应该以大写字母开头,例如buttonButtontestPrivateTestPrivate