【问题标题】:Kotlin-allopen plugin + @JvmField on a val not final enoughKotlin-allopen 插件 + @JvmField 在 val 上还不够最终
【发布时间】:2017-05-18 09:32:53
【问题描述】:

我正在 Kotlin 1.0.6 下测试新的 kotlin-allopenkotlin-spring 插件。

在我的一个@Transactional-annotated 类中,我有一个字段:

@JvmField val foo = null

当我尝试构建项目时,我得到:

Error:(45, 5) Kotlin: JvmField can only be applied to final property

有没有合适的方法来解决这个问题?由于 JUnit 的 @Rule,我的实际代码需要 @JvmField。设法通过删除@JvmField 并注释getter 来“解决”问题。不确定是错误还是功能。

【问题讨论】:

标签: kotlin kotlin-allopen


【解决方案1】:

我得到了官方的解决方案。

在这种情况下,val 提供的 finality 是不够的。事实证明,您需要在此处显式添加 final 关键字,这不被视为错误。

@JvmField final val foo = null

【讨论】:

  • 这不是错误吗?如果我们把编译器放在一边,它至少在 IDE 中是一个但因为消息不够清晰。我没有想法(双关语)如何处理它。对于普通的 JUnit 测试它工作正常,但对于 Spring(例如)它会抛出一个错误......
  • 我的意思是说“IDE 中的bug”,哈哈。无论如何,我现在正在关注这个问题。谢谢!
猜你喜欢
  • 2017-06-18
  • 2019-11-16
  • 2020-05-18
  • 1970-01-01
  • 2018-06-21
  • 2022-10-24
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多