AndroidAnnotations – ViewById不能用于私人元素
AndroidAnnotations版本: 4.3.1
Android编译SDK版本: 26
Kotlin版本: 1.1.3-2
我正在尝试使用Kotlin和AndroidAnnotaions来构建应用程序。 构建以
Error:Execution failed for task ':app:kaptDebugKotlin'. > Internal compiler error. See log for more details
在androidannotations.log
是一个像一个erros
00:10:43.908 [RMI TCP Connection(91)-127.0.0.1] ERROR oaipModelValidator:77 - org.androidannotations.annotations.ViewById cannot be used on a private element
那就是@ViewById
注解的用法
@ViewById var description: TextView? = null
Pref带注释的变量也会发生同样的情况。
还有其他人面临同样的问题还是只有我?
尝试使用lateinit
:
@ViewById lateinit var description: TextView
得到这个错误的原因可能是由于后台的行为。 它在默认情况下是不可见的,并且field
标识符只能在属性的访问器中使用。 这就是为什么你得到@ViewById cannot be used on a private element
。
lateinit
工作的原因是因为它改变了领域的可访问性。 根据Kotlin doc :
后期初始化属性也暴露为字段。 该字段的可见性将与lateinit属性设置器的可见性相同。
所以, @JvmField
是这个问题的另一个解决方案。
@ViewById @JvmField var helloTextView: TextView? = null
它也改变了该领域的可见性,正如文件所述:
如果您需要将Kotlin属性公开为Java中的字段,则需要使用@JvmField批注对其进行注释。 该字段与底层属性具有相同的可见性。 如果具有支持字段,不是私有的,没有打开的,覆盖或const修饰符,并且不是委派的属性,则可以使用@JvmField注释属性。
您也可以参考这个例子 , Kotlin使用注释处理来了解Android框架。
- SugarORM + Kotlin:Unresovled参考“listAll”
- Kotlin – NoSuchMethodError实例化Throwable时
- Kotlin – 如何决定“lateinit”和“可空变量”?
- 如何在Kotlin anko中使用TextInputLayout和TextInputEditText
- Kotlin期望的属性获得者或设置者
- 应用; 曾经使用过不同的AppComponent; 在预先验证期间
- Android – 使用泛型有一个RxJava翻新调用使用相同的接口返回各种类型
- UNINITIALIZED_VARIABLE变量_longPressed必须被初始化
- 在Android中将地图转换为捆绑