首页 > 解决方案 > kotlin 错误消息“方法'无效()' 未找到”

问题描述

我正在学习by关键字。我了解到,当 C 委托 aProp 并实现 B 并且 A 覆盖 bMeth 并实现 B(C 的实例)时。bMeth 与 A 类 A 和 A 类型的顶级属性 aProp 和接口 B 和 bMeth 函数覆盖的 bMeth 做同样的事情B 类和 C.so 当我编写以下代码进行实验以确认这一事实时,我预期的输出将是 AClassf1 AClassf2 AClassf3 但输出是

Exception in thread "main" java.lang.NoSuchMethodError: learn1.AClass: method 'void <init>()' not found
    at learn1.BClass.<init>(Experiment.kt:21)
    at learn1.ExperimentKt.main(Experiment.kt:6)

为什么我会收到此消息?以下代码:

package learn1

fun main(args : Array<String>) {
    val bClass = BClass()
    bClass.f1()
    bClass.f2()
    bClass.f3()
}
interface AInter{
    fun f1() = println("AInterf1")
    fun f2()
    fun f3()
}
class AClass : AInter{
    override fun f1() = println("AClassf1")
    override fun f2() = println("AClassf2")
    override fun f3() = println("AClassf3")
}
class BClass(val aClass : AClass = AClass()) : AInter by aClass

标签: kotlindelegates

解决方案


您的代码在 playground 上编译并运行良好,并按预期输出:

AClassf1
AClassf2
AClassf3

你是如何编译和运行这段代码的?

当您针对某个其他类编译代码时,此错误通常是二进制不兼容错误,但随后您尝试在类路径上使用该类的不同版本运行它。

在您的特定情况下,它告诉您<init>在运行 B 的构造函数时(可能在为 A 创建默认值时)找不到类 A 的构造函数(是构造函数)。


推荐阅读