android反射方法调用 - 什么是接收器

时间:2017-03-09 19:03:03

标签: java android reflection


我尝试通过创建扩展AppCompatButton的类来创建自定义按钮方法。我有定位按钮方法的工作方法
method = actClass.getMethod(methodName,View.class);其中actClass是调用按钮的活动的类。当我到达调用方法的代码时,我得到一个例外:

Error = "expected receiver of type com.kana_tutor.button_demo.MainActivity,
but got java.lang.Class<com.kana_tutor.button_demo.MainActivity>"

我尝试过使用类和意图,但都没有效果。我尝试从MainActivity(方法所在的位置)导出上下文并且这样做有效,但这似乎是一个坏主意。

什么是接收器?
Method.java将其描述为&#34; @param接收者调用此方法的对象。&#34;这只是对我称之为的方法的参考 我有方法所在的类及其名称。我怎样才能创建一个接收器?&#34;
我以前真的不需要使用反射或调用。
谢谢!

1 个答案:

答案 0 :(得分:1)

接收器实际上是包含您尝试调用的方法的对象的实例。我说一个实例,因为当你调用它时对象必须存在 您可能创建了类似的方法:

Method method = classInstance.getMethod(methodName, View.class);

然后尝试用类似

的方式调用它
retValue = handler.invoke(method, view);

MainActivity的上下文作为您的处理程序的原因是它的MainActivity.this - MainActivity对象的一个​​实例,并假设您调用的方法是在MainActivity中。调用会起作用。