在 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()
}

换句话说,构造A1A2实例的语法是什么?

编辑: ... 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 表达式中进行详尽检查。