首页 > 解决方案 > 在 Kotlin 中覆盖 Java final 函数的 Kotlin 编译器问题

问题描述

我正在处理 Kotlin/Java 编译器的以下问题。想象一下下面的场景:假设First是一个带有 final 函数的 Java 类,并且Second是一个 Kotlin 类,它扩展First了一个与类中的 final 函数同名的函数First,例如:

// Java class
class First {
    final void foo() { }
}
// Kotlin class
class Second: First() {
    fun foo() { }
}

显然,这是错误的,因为最终函数foo()不能被覆盖。但是,编译成功通过并且在运行时我得到java.lang.LinkageError: Method void Second.foo() overrides final method in class First. 这是编译器的正确行为吗?我想这个案例会有一些验证。谢谢!

标签: kotlinkotlin-java-interop

解决方案


推荐阅读