【问题标题】:Exposing Member Variables with ButterKnife使用 ButterKnife 公开成员变量
【发布时间】:2018-06-18 00:35:10
【问题描述】:

好奇的问题,我正在使用 ButterKnife,我刚刚发现您不能在私有方法中使用,因为 ButterKnife 创建了使用它们的类。 这不违反封装原则吗?我的意思是,你的变量也会暴露给其他类,不是吗?

【问题讨论】:

  • Dagger 也一样。

标签: android annotations butterknife


【解决方案1】:

你完全正确,使用Butterknife 违反了封装原则。


Butterknife 使用自己生成的代码来执行视图查找。并且这些查找是在单独的类(-es)中完成的,因此这些字段不能是私有的。

引用:

生成的代码存在于这个类之外的一个类中,因此 字段确实在类之外被访问,因此不是 私人的。如果您看到其他生成的代码正在访问私有 字段,它使用反射绕过私有访问 限制,这意味着您的字段看起来是私有的,但 实际上是在课堂之外访问的。

使用反射不仅在底层是一样的,而且与视图查找相比,速度要慢得多。


无论如何,那些使用 Butterknife 执行视图绑定的类不应该在除了负责相同事情(即视图绑定)的类之外的任何地方初始化,因此违反封装并不是什么大问题。例如:Activities 可以有Fragments 的实例,Fragments/Activities 可以有RecyclerViewAdapters 的实例,因为所有这些都负责视图绑定,但ViewModel (MVVM 架构) example 通常不应有 Fragment/Activity 或任何 View 的实例,因为它与视图绑定无关。

祝你好运。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2019-04-27
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多