Android 使用ButterKnife公开成员变量
奇怪的问题,我正在使用ButterKnife,我刚刚发现不能在私有方法中使用,因为ButterKnife创建了使用它们的类这是否违反了封装原则?我的意思是,那么您的变量也将暴露给其他类,不?您完全正确,使用Android 使用ButterKnife公开成员变量,android,annotations,butterknife,Android,Annotations,Butterknife,奇怪的问题,我正在使用ButterKnife,我刚刚发现不能在私有方法中使用,因为ButterKnife创建了使用它们的类这是否违反了封装原则?我的意思是,那么您的变量也将暴露给其他类,不?您完全正确,使用Butterknife违反了封装原则 Butterknife使用自己生成的代码执行视图查找。这些查找是在单独的类(-es)中完成的,因此字段不能是私有的 引用: 生成的代码存在于该类之外的类中,因此 字段实际上是在类之外访问的,因此 私有的如果您看到其他生成的代码正在访问私有 字段,它使用反
Butterknife
违反了封装原则
Butterknife
使用自己生成的代码执行视图查找。这些查找是在单独的类(-es)中完成的,因此字段不能是私有的
引用:
生成的代码存在于该类之外的类中,因此
字段实际上是在类之外访问的,因此
私有的如果您看到其他生成的代码正在访问私有
字段,它使用反射来绕过私有访问
限制,这意味着您的字段看起来是私有的,但是
实际上是在类之外访问的
使用反射不仅在引擎盖下是同样的事情,而且与视图查找相比,速度要慢得多
无论如何,那些使用Butterknife执行视图绑定的类不应该在负责相同事情(即视图绑定)的类之外的任何地方初始化,因此违反封装不是什么大问题。例如:
活动
可以有片段的实例
,片段/活动
可以有回收服务适配器的实例
,因为所有这些都负责视图绑定,但是视图模型
(MVVM体系结构)例如,通常不应该有片段/活动
或任何视图
的实例,因为它与视图绑定无关
祝你好运 匕首也是一样。