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框架。
- 如何在Android Studio中配置AspectJ
- runOnUiThread没有调用
- 无法解析:com.google.firebase:firebase-auth:11.0.2
- 在kotlin中使用意外的令牌(在同一行上使用;来分隔表达式)
- 转到android Kotlin中的下一个活动; 未解决的类参考
- Android ClassNotFoundException在路径上找不到类:DexPathList
- 如何在Kotlin中使用AndroidAnnotation @SharedPref
- Android studio 2.3:无法初始化类org.jetbrains.kotlin.android.actions.NewKotlinActivityAction
- Kotlin:ArrayIndexOutOfBoundsException在将DispatchTask转换为字符串期间