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
中的是一个像
这样的大量错误00:10:43.908 [RMI TCP Connection(91)-127.0.0.1] ERROR o.a.i.p.ModelValidator:77 - org.androidannotations.annotations.ViewById cannot be used on a private element
即使用@ViewById
注释
@ViewById
var description: TextView? = null
Pref带注释的变量也会发生同样的情况。
是否有其他人面临同样的问题,或者只是我?
答案 0 :(得分:4)
尝试使用lateinit
:
@ViewById
lateinit var description: TextView
出现此错误的原因可能是由于支持字段的行为。默认情况下它是不可见的,field
标识符只能在属性的访问者中使用。这就是你@ViewById cannot be used on a private element
的原因。
lateinit
工作原因的原因是它改变了字段的可访问性。根据{{3}}:
延迟初始化的属性也作为字段公开。该字段的可见性将与lateinit属性设置器的可见性相同。
因此,@JvmField
是此问题的另一种解决方案。
@ViewById
@JvmField var helloTextView: TextView? = null
它还会更改字段的可见性,如文档所述:
如果需要将Kotlin属性公开为Java中的字段,则需要使用@JvmField批注对其进行批注。该字段与底层属性具有相同的可见性。如果属性具有支持字段,非私有,没有open,override或const修饰符,并且不是委托属性,则可以使用@JvmField对属性进行批注。
您也可以使用注释处理来参考有关Android框架的Kotlin doc和example。