调用Android/java中一个类的私有对象的方法



我有以下类:

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调用,因为默认情况下私有字段不可访问)

相关内容

  • 没有找到相关文章

最新更新