假设您将android:onClick="doClick"
中的Activity
定义为
protected void doClick(View view) { }
此名称必须对应于一个公共方法,该方法只接受View类型的一个参数。
这是基础Class.getMethod()
方法的给定要求,它只发现公共方法为documentation状态
返回一个
Method
对象,该对象反映此Class
对象所代表的类或接口的指定公共成员方法。
那么,这个实现根本不适用的实现在某些设备和模拟器上是如何工作的呢?虽然它在使用相同API级别的其他设备上也不起作用?
答案 0 :(得分:0)
根据“The Java™ Tutorials”: protected修饰符指定只能在自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中使用其类的子类
答案 1 :(得分:0)
我调试了特定的实现。代码的相关部分位于支持库中,使用Class.getMethod()
。
如文档中所述,此方法仅查找公共成员方法并且行为正确。出于某种原因,Activity
声明的受保护方法的所有修饰符(onCreate()
和doClick()
)都设置为1
,这意味着它们实际上是公开的。
我只能观察到使用Mac创建debug
版本的这种行为。那么为什么会发生这种情况仍然是一个悬而未决的问题,我正试图找到答案。