2016-12-02 12 views
1

なぜKotlinはJavaとは異なりプライベート内部クラスのパブリックインスタンスを作成できないのですか?Kotlinでプライベート内部クラスのpublicインスタンスを作成する

Javaで作品:

public class Test { 
    public A a = new A(); 

    private class A { 
    } 
} 

は(Aクラスがpublicなければならない)Kotlinでは動作しません:

class Test { 
    var a = A() 
// ^ 
// 'public' property exposes its private type 'A' 

    private inner class A 
} 

答えて

3

場合、それは本当にありませんので、私が引き受けますやるべきことのように思える。プロパティaにアクセスするコードは、その型にアクセスできません。変数に割り当てることはできませんでした。 Testクラス外のTest.A myVar宣言はエラーになります。それを許さないことによって、コードはより一貫性があるように強制されます。より良い質問は、なぜJavaが許可するのだろうか?スイフトなどの他の言語にも同じ制限があります。

2

https://kotlinlang.org/docs/reference/visibility-modifiers.html#classes-and-interfaces

状態:Javaのユーザーのための

注:外部クラスはKotlinにその内部クラスのプライベートメンバーを表示しません。あなたのユースケースについては

、あなたは、あなたの外側のクラスのメンバにアクセスすることができますprivate inner classesNested Classes

を使用することができます。

私はコットリンチームがそれをそのように実装したと思うので、private inner classesのメンバーの範囲をinner classの中でしかアクセスできないようにすることができます。私はこれがJavaでは不可能だと思います。

関連する問題