Android 使用ButterKnife公开成员变量

Android 使用ButterKnife公开成员变量,android,annotations,butterknife,Android,Annotations,Butterknife,奇怪的问题,我正在使用ButterKnife,我刚刚发现不能在私有方法中使用,因为ButterKnife创建了使用它们的类这是否违反了封装原则?我的意思是,那么您的变量也将暴露给其他类,不?您完全正确,使用Butterknife违反了封装原则 Butterknife使用自己生成的代码执行视图查找。这些查找是在单独的类(-es)中完成的,因此字段不能是私有的 引用: 生成的代码存在于该类之外的类中,因此 字段实际上是在类之外访问的,因此 私有的如果您看到其他生成的代码正在访问私有 字段,它使用反

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

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


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

引用:

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

使用反射不仅在引擎盖下是同样的事情,而且与视图查找相比,速度要慢得多


无论如何,那些使用Butterknife执行视图绑定的类不应该在负责相同事情(即视图绑定)的类之外的任何地方初始化,因此违反封装不是什么大问题。例如:
活动
可以有
片段的实例
片段/活动
可以有
回收服务适配器的实例
,因为所有这些都负责视图绑定,但是
视图模型
(MVVM体系结构)例如,通常不应该有
片段/活动
或任何
视图
的实例,因为它与视图绑定无关



祝你好运

匕首也是一样。