确认Kotlin密封类无参时子类可省略继承声明的正确性
关于Kotlin密封类子类省略父类构造调用的疑问
我在Kotlin官方文档中未找到相关说明,或许是我有所遗漏。不过通过测试,我得出如下假设:当子类无需访问密封类的构造参数时,可以省略指定该子类的父类型为密封类。这在某种程度上违背直觉,但我能想到其适用场景,我的核心诉求是确认是否可以通过这种方式简化代码编写。
示例代码
object SealedClassesTest2 { sealed class Class1 { data class SubClass1(val value: String) : Class1() } sealed class Class2 { data class SubClass2(val value: String) } sealed class Class3(val parentVal: String) { data class SubClass3(val value: String) : Class3("Class3") } sealed class Class4(val parentVal: String) { data class SubClass4(val value: String) } @JvmStatic fun main(args: Array<String>) { val subClass1 = Class1.SubClass1("SubClass1") val subClass2 = Class2.SubClass2("SubClass2") val subClass3 = Class3.SubClass3("SubClass3") val subClass4 = Class4.SubClass4("SubClass4") println(subClass1.value) println(subClass2.value) println(subClass3.value) println(subClass3.parentVal) println(subClass4.value) } }
输出结果
SubClass1 SubClass2 SubClass3 Class3 SubClass4
测试中的行为差异
- Class1和Class2的行为完全一致,即便SubClass2未调用Class2的构造函数,编译与运行均无报错。
- Class3和Class4同样无编译与运行错误,但区别在于subClass3可以访问
parentVal,而subClass4无法访问(因为未调用Class4的构造函数)。
我假设当父密封类无构造参数时,子类可省略调用其父类构造函数,且编译器不会区分二者差异。请问该假设是否正确?
内容的提问来源于stack exchange,提问作者Tim Korelov
相关产品推荐
相关产品推荐

