我可以访问小部件,文本对象的私人领域



我已经读了很多关于反射的文章,所有的例子都只是简单的访问string, double和int等对象。但是,我想访问对象,如Widget,文本,甚至自定义对象。我试过同样的方法作为字符串,但它失败了。

例如。

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();失败。

Field是指向类型上的字段的类,而不是该类的任何特定实例。

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

的例子:

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

相关内容

  • 没有找到相关文章

最新更新