あなたはこのをお探しですか?内部クラスは、外側にpontersを保持しているため、
abstract class A {
inner class A1 : A()
inner class A2 : A()
}
fun doSome() { // Error
val a1 = A1()
val a2 = A2()
}
これはKotlinとJavaの両方で許可されていません。
abstract class A {
fun doSome() { // OK
val a1 = A1()
val a2 = A2()
}
inner class A1 : A()
inner class A2 : A()
}
は、私はあなたがおそらくのように、Aの外にA1/A2のインスタンスを構築したいと思いますクラス。 A1
/が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
です。これは、コトルがexhautivenessチェックを行うのに役立ちますwhen
の表現。
あなたはそうです。私は**の外に**を言っていたはずです。 [ここで私が解決しようとしている特定のユースケース](https://stackoverflow.com/questions/47361279)は密封されたクラスです。 Aは本当に準インタフェースで、A1とA2は私が制御しないボックス化された外部クラスです。アイデアがあれば、読んでもらえたらいいのでしょうか?ありがとう。 – sirksel
外部クラスのインスタンスで内部クラスを構築するだけでよいことに言及してください。おそらく、内部クラスのインスタンスを返す外部クラスに関数を書くべきでしょう。 – ice1000