1

我已经阅读了很多关于反射的帖子,所有的例子都只是简单的访问对象的字符串、双精度和整数等。但是,我想访问像 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(); 失败。

4

1 回答 1

0

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());

同样在风格上,类应该以大写字母开头,例如button→<code>Button 和testPrivate→<code>TestPrivate

于 2013-03-02T14:15:13.440 回答