【问题标题】:Kotlin: modifier 'override' is not applicable to 'initializer'Kotlin:修饰符“覆盖”不适用于“初始化程序”
【发布时间】:2018-08-06 16:28:37
【问题描述】:

我在一个 Java 项目中工作,我负责将一些类迁移到 Kotlin。有一个具有下一个方法的 Java 抽象类:

protected abstract boolean init(params) {
    ...
}

并且这个类在一个公共类中被扩展,所以我重写了这样的方法:

@Override
protected boolean init(params) {
    ...
}

因此,当尝试将此公共类迁移到 Kotlin 时,

override protected fun init(params): Boolean{}

我收到错误 Kotlin: modifier 'override' is not applicable to 'initializer',因为方法的名称 init 是 Kotlin 中的关键字。我知道解决这个问题的一种方法是更改​​抽象类中方法的名称(例如,从 init 到初始化),但它在项目中有大量用途,所以我想知道是否有更好的方法来解决这个问题在花时间重构整个项目之前。

【问题讨论】:

  • 欢迎来到 StackOverflow!您的代码在其他方面似乎在语法上不正确。在 Kotlin 中,init 是一个软关键字,特别是允许作为函数名称。请发布重现错误的完整代码示例 (MVCE)。
  • 此外,您应该在 Kotlin 中使用 Boolean 类型,而不是 boolean
  • 在 Java 中,如果您要覆盖的方法是公共的,则覆盖也必须是公共的。
  • 这是什么params?您可以发布完整的方法签名吗?我试着写这个,但它对我来说编译得很好。

标签: java intellij-idea kotlin migration


【解决方案1】:

不要使用受保护的关键字。您可以在公共课程中使用这样的方法。

override fun init(): Boolean {
    ...
}

【讨论】:

  • 欢迎在 Stack Overflow 上发帖。为什么我们不应该使用受保护的?您能否通过解释“编辑”此答案。 How to Answer。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 2018-10-25
  • 2015-11-22
  • 1970-01-01
相关资源
最近更新 更多