kri*_*yna 3 android kotlin android-annotations
AndroidAnnotations版本: 4.3.1
Android compile SDK版本: 26
Kotlin版本: 1.1.3-2
我正在尝试使用Kotlin和AndroidAnnotaions构建应用程序。构建以
Error:Execution failed for task ':app:kaptDebugKotlin'. > Internal compiler error. See log for more details
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
多数民众赞成在@ViewById注释的用法
@ViewById
var description: TextView? = null
Run Code Online (Sandbox Code Playgroud)
对于带有Pref注释的var,也是如此。
还有其他人面临同样的问题吗?还是我自己?
尝试使用lateinit:
@ViewById
lateinit var description: TextView
Run Code Online (Sandbox Code Playgroud)
出现此错误的原因可能是由于背景字段的行为。默认情况下它是不可见的,并且field标识符只能在属性的访问器中使用。这就是为什么你得到@ViewById cannot be used on a private element。
之所以lateinit起作用,是因为它改变了该字段的可访问性。根据Kotlin doc的说法:
后期初始化的属性也显示为字段。该字段的可见性将与lateinit属性设置器的可见性相同。
因此,@JvmField是解决该问题的另一种方法。
@ViewById
@JvmField var helloTextView: TextView? = null
Run Code Online (Sandbox Code Playgroud)
它还会按照文档说明更改字段的可见性:
如果需要将Kotlin属性公开为Java中的字段,则需要使用@JvmField注释对其进行注释。该字段将具有与基础属性相同的可见性。如果属性具有后备字段,不是私有属性,没有打开,覆盖或const修饰符且不是委派属性,则可以使用@JvmField对其进行注释。
您还可以参考此示例以及有关使用注释处理的Android框架的Kotlin文档。
| 归档时间: |
|
| 查看次数: |
706 次 |
| 最近记录: |