在Kotlin的抽象超类中的内部类?

如果一组内部类是包含类的外部抽象的唯一实现(子类),那么如何实例化它们?

abstract class A { inner class A1 : A() inner class A2 : A() } 

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

编辑: …在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中都是不允许的,因为内部类对外部类拥有认知。 如果你想在A2之外构造A1 / A2 ,只需删除inner修饰符。

 abstract class A { class A1 : A() class A2 : A() } fun doSome() { // OK again val a1 = A.A1() val a2 = A.A2() } 

另外,因为你说过了

一组内部类是其外部抽象包含类的唯一实现(子类)

您可以用sealed替换abstract修饰符。 这将有助于Kotlin在expressionwhen做详尽检查。