奇怪的问题,我使用ButterKnife,我发现你不能在私有方法中使用,因为ButterKnife会创建使用它们的类。 是否违反了封装原则?我的意思是,那么你的变量也会暴露给其他类,不是吗?
答案 0 :(得分:1)
您完全正确,使用Butterknife
违反了封装原则。
Butterknife
使用其自身生成的代码来执行视图查找。而且这些查找是在单独的类(-es)中完成的,因此字段不能是私有的。
报价:
生成的代码存在于该类之外的一个类中,因此 字段实际上是在类之外访问的,因此不是 私人的。如果您看到其他正在访问私有的生成代码 字段,它使用反射绕过私有访问 限制,这意味着您有一些看起来很私密但属于 实际上是在课程之外访问的。
与反射查找相比,使用反射不仅在后台是同一件事,而且显着更慢。
Activities
可以具有Fragments
的实例,Fragments/Activities
可以具有RecyclerViewAdapters
的实例,因为所有这些都负责视图绑定,但是ViewModel
(例如,MVVM体系结构)通常不应具有Fragment/Activity
或任何View
的实例,因为它与视图绑定无关。
祝你好运。 :)