使用ButterKnife公开成员变量

时间:2018-06-18 00:35:11

标签: android annotations butterknife

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

1 个答案:

答案 0 :(得分:1)

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


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

报价:

  

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

与反射查找相比,使用反射不仅在后台是同一件事,而且显着更慢。


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


祝你好运。 :)