在 Kotlin 的抽象超级 class 中的内部 class?
Inner class within its abstract superclass in Kotlin?
如果一组内部 classes 是其包含 class 的外部抽象的唯一实现(子classes),如何实例化它们?
abstract class A {
inner class A1 : A()
inner class A2 : A()
}
换句话说,构造A1
或A2
实例的语法是什么?
编辑: ... class A.
的体外
你在找这个吗?
abstract class A {
fun doSome() { // OK
val a1 = A1()
val a2 = A2()
}
inner class A1 : A()
inner class A2 : A()
}
我认为您可能想在 A 之外构造 A1/A2 的实例,例如:
abstract class A {
inner class A1 : A()
inner class A2 : A()
}
fun doSome() { // Error
val a1 = A1()
val a2 = A2()
}
这在 Kotlin 和 Java 中都是不允许的,因为内部 class 持有指向外部 class 的指针。如果要在 A
之外构造 A1/A2
,只需删除 inner
修饰符即可。
abstract class A {
class A1 : A()
class A2 : A()
}
fun doSome() { // OK
val a1 = A.A1()
val a2 = A.A2()
}
另外,另外,既然你说是
a set of inner classes are the only implementations (subclasses) of their outer abstract containing class
您可以将 abstract
修饰符替换为 sealed
。这将帮助 Kotlin 在 when
表达式中进行详尽检查。
如果一组内部 classes 是其包含 class 的外部抽象的唯一实现(子classes),如何实例化它们?
abstract class A {
inner class A1 : A()
inner class A2 : A()
}
换句话说,构造A1
或A2
实例的语法是什么?
编辑: ... class A.
的体外你在找这个吗?
abstract class A {
fun doSome() { // OK
val a1 = A1()
val a2 = A2()
}
inner class A1 : A()
inner class A2 : A()
}
我认为您可能想在 A 之外构造 A1/A2 的实例,例如:
abstract class A {
inner class A1 : A()
inner class A2 : A()
}
fun doSome() { // Error
val a1 = A1()
val a2 = A2()
}
这在 Kotlin 和 Java 中都是不允许的,因为内部 class 持有指向外部 class 的指针。如果要在 A
之外构造 A1/A2
,只需删除 inner
修饰符即可。
abstract class A {
class A1 : A()
class A2 : A()
}
fun doSome() { // OK
val a1 = A.A1()
val a2 = A.A2()
}
另外,另外,既然你说是
a set of inner classes are the only implementations (subclasses) of their outer abstract containing class
您可以将 abstract
修饰符替换为 sealed
。这将帮助 Kotlin 在 when
表达式中进行详尽检查。