代码之家  ›  专栏  ›  技术社区  ›  tynn

为什么活动中受保护的android:onclick方法实际有效?

  •  30
  • tynn  · 技术社区  · 8 年前

    假设你定义 android:onClick="doClick" 在你的 Activity 作为

    protected void doClick(View view) { }
    

    这个 documentation 声明

    此名称必须与只接受一个类型为View的参数的公共方法相对应。

    这是基础的给定要求 Class.getMethod() 方法,它只查找公共方法作为 documentation 声明

    返回 Method 反映由此表示的类或接口的指定公共成员方法的对象 Class 对象。

    那么,这种完全不应该工作的实现如何可能在某些设备和模拟器上工作,而在其他使用相同API级别的设备和模拟器上却不工作呢?

    2 回复  |  直到 8 年前
        1
  •  0
  •   Regis    8 年前

    根据“ The Java™ Tutorials “: 受保护的修饰符指定只能在其自己的包(与包私有的情况一样)内访问成员,此外,还可以通过其在另一个包中的类的子类访问成员。

        2
  •  0
  •   tynn    8 年前

    我调试了特定的实现。代码的相关部分在 支持库 使用 Class.getMethod() 。

    如文档中所述,此方法仅查找公共成员方法并正确执行操作。出于某种原因,声明的受保护方法的所有修饰符 Activity (这些是 onCreate() 和 doClick() )设置为 1 也就是说这些都是公开的。

    我只能观察这种行为 debug 使用Mac进行构建。所以为什么会发生这种情况仍然是一个悬而未决的问题,我正试图找到答案。