AndroidAnnotations - ViewById不能用于私有元素

时间:2017-08-15 20:37:59

标签: android kotlin android-annotations

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带注释的变量也会发生同样的情况。

是否有其他人面临同样的问题,或者只是我?

1 个答案:

答案 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 docexample