如果一组内部类是其外部抽象包含类的唯一实现(子类),那么如何实例化它们?
abstract class A {
inner class A1 : A()
inner class A2 : A()
}
换句话说,构建A1
或A2
的实例的语法是什么?
编辑: ...在A类机构之外。
答案 0 :(得分:3)
你在找这个吗?
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中都不允许这样做,因为内部类持有外部类的ponters。如果您想在A1
之外构建A2
/ A
,只需删除inner
修饰符。
abstract class A {
class A1 : A()
class A2 : A()
}
fun doSome() { // OK again
val a1 = A.A1()
val a2 = A.A2()
}
另外,因为你说过它
一组内部类是包含类
的外部抽象的唯一实现(子类)
您可以将abstract
修饰符替换为sealed
。这将有助于Kotlin在when
表达式中进行穷举检查。