我已经阅读了很多关于反射的帖子,所有的例子都只是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();失败。
答案 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());
同样在风格上,类应该以大写字母开头,例如button
→Button
和testPrivate
→TestPrivate