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框架。