我有以下类:
public class Foo {
private View myButton;
...
}
我想调用foo.myButton.performClick()。但是我不能修改Foo类,因为它是一个库。我该怎么做呢?
我正在尝试
Field mField= Foo.class.getDeclaredField("myButton");
但是我不知道如何从字段
中获取View引用谢谢
With
Field mField = Foo.class.getDeclaredField("myButton")
您将获得该字段的规范的引用。其中包含的数据包括访问器、它所保存的值的类型等。如果您想获得视图的引用,您需要执行以下操作:
View viewReference = (View)mField.get(fooInstance);
要访问私有字段(使用下面提到的反射),您需要确保该字段是可访问的:
mField.setAccessible(true);
我建议您在获得参考后恢复标志。根据您所面临的情况,可能有更好的解决方案。
好运没有办法使用/获取私有字段或方法。这是java规则。您不能继承私有字段/方法。私有方法/字段被限制在它们所定义的类中。
您可能需要在实际获取该字段之前将可访问性设置为true:
Field field = Foo.getClass().getDeclaredField("myButton"));
field.setAccessible(true);
View button = (View) field.get(fooInstance);
我想你可以尝试通过Java反射来做到这一点。类似于:
Foo obj = new Foo();
Method method = obj.getClass().getDeclaredMethod( methodName );
method.setAccessible(true);
Object result = method.invoke(obj);
一定有比闯入实例获取其私有信息更好的答案。信息几乎肯定是私有的,这是有原因的。
然而,你可以这样做,使用get
(在你的代码得到mField
之后):
mField.setAccessible(true);
View button = (View)mField.get(theFooInstance);
(您需要setAccessible
调用,因为默认情况下私有字段不可访问)