【问题标题】:android reflection method invoke -- what is a receiverandroid反射方法invoke——什么是receiver
【发布时间】:2026-01-01 08:50:01
【问题描述】:


我正在尝试通过创建扩展 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 将其描述为“@param 接收者调用此方法的对象”。这只是对我正在调用的方法的引用吗

我有该方法所在的类及其名称。如何创建“接收方”?
我以前真的不需要使用反射或调用。
谢谢!

【问题讨论】:

  • a) 发布您的代码。 b) 你不能在不指定实例的情况下调用实例方法。那是接收器。
  • 我认为您还应该更清楚地说明您正在尝试做的事情 - 您做正确事情的几率似乎微乎其微。无需使用反射来扩展按钮。

标签: java android reflection


【解决方案1】:

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

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

然后尝试用类似的东西调用它

retValue = handler.invoke(method, view);

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

【讨论】:

    最近更新 更多