2017-11-20 8 views
1

内部クラスの集合が、そのクラスを含む外部抽象クラスの唯一の実装(サブクラス)である場合、それらをどのようにインスタンス化しますか?言い換えればKotlinの抽象スーパークラス内の内部クラス?

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

A1またはA2のインスタンスを構築するための構文は何ですか? EDIT

:クラスAの体外 ...

答えて

3

あなたはこのをお探しですか?内部クラスは、外側に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の表現。

+0

あなたはそうです。私は**の外に**を言っていたはずです。 [ここで私が解決しようとしている特定のユースケース](https://stackoverflow.com/questions/47361279)は密封されたクラスです。 Aは本当に準インタフェースで、A1とA2は私が制御しないボックス化された外部クラスです。アイデアがあれば、読んでもらえたらいいのでしょうか?ありがとう。 – sirksel

+0

外部クラスのインスタンスで内部クラスを構築するだけでよいことに言及してください。おそらく、内部クラスのインスタンスを返す外部クラスに関数を書くべきでしょう。 – ice1000

関連する問題