通过“懒惰”和“对象”组合会导致编译器错误“找不到符号”

时间:2018-11-06 08:40:55

标签: android kotlin realm kapt

尝试使用by lazy {{1}时,在更新到Kotlin 1.3.0(在1.2.71 中工作)后,我无法编译。 }。这似乎仅在我的项目中发生。一个演示项目运行正常。

我想向给定的类添加接口并延迟加载其值。

我创建了一个小示例,该示例在我的项目中不起作用,但是在其他任何项目中都可以正常工作

object

一旦我合并open class Foo interface Bar { val lazyLoadedString : String } class Test { private val foo by lazy { object : Foo(), Bar { override val lazyLoadedString = "Demo" } } } object,它就不能再编译并显示以下错误。单独使用每个人都是有效的。

  

Test.java:9:错误:找不到符号
  私人最终my.package.Test $ foo $ 2 $ 1 getFoo()

     

符号:类Test $ foo $ 2 $ 1
  位置:打包my.package

近距离查看时,您会看到生成的Java文件显示此错误,而不是kotlin代码。

对此有何想法?

1 个答案:

答案 0 :(得分:2)

对于这种特定类型的代码,看来kapt在Kotlin 1.3.0中已被破坏。

在上面的代码中,触发它的是Realm注册的注释处理器,但是任何其他注释处理器都将导致相同的错误。

此问题已在此处跟踪:https://youtrack.jetbrains.net/issue/KT-28053