我在学习by关键字。我了解到,当C委托aProp并实现B,而A重写bMeth并实现B(C的实例)时,当我编写以下代码进行实验以确认这一事实时,.bMeth与被A重写的bMeth、A类型的顶级属性aProp、接口B和B的bMeth函数以及类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发布于 2021-08-21 09:22:06
您的代码可以很好地编译和运行on the playground,并且如预期的那样输出:
AClassf1
AClassf2
AClassf3你是如何编译和运行这些代码的?
当您针对其他类编译代码时,此错误通常是二进制不兼容错误,但随后您尝试在类路径上使用该类的不同版本来运行它。
在您的特定情况下,它告诉您在运行B的构造函数时(可能是在为A创建默认值时),它找不到类A的构造函数(<init>是构造函数)。
https://stackoverflow.com/questions/68871634
复制相似问题