2016-05-25 9 views
0

は、私は、ネストされたプライベート静的クラスのjavaをインスタンス化するにはどうすればよい

new A.C(new A.B()) 

が、次の理由私は私がやってプライベート静的クラスBのインスタンスを作成しようとしています

class A{ 
    private static class B{} 
    static class C{ 
    B b; 
    C(B b){ 
     this.b=b; 
    } 
    int foo(){ 
     return 42; 
    } 
    } 
} 

いくつかのネストされたクラスを考えてみましょうBはプライベートです私はこれを行うことができません。 クラスBを使ってクラスCを構築する方法はありますか?

+2

クラスCのインスタンスを作成しようとしていますか? – Eran

+1

[MCVE] – STaefi

+0

の完全なコードを提供します。プライベートメンバー 'クラスB 'を'クラスC'のパブリックコンストラクタに渡そうとしています。それは 'クラスB 'を非公開にするという目的を破るものです。このコードが動作する場所は 'クラスA 'そのものです。 – Santosh

答えて

3

あなたはどちらかBが非プライベートに、またはC作成するAにヘルパーメソッドを提供することができます。

A.C myc = A.create(); 

class A{ 
    private static class B{} 
    static class C{ 
    B b; 
    C(B b){ 
     this.b=b; 
    } 
    int foo(){ 
     return 42; 
    } 
    } 
    static createC() { 
    return new C(new B()); 
    } 
} 

だからAの外には、あなたがこのようなCのインスタンスを作成することができます

Bは外部には表示されないため、Cのコンストラクタは役に立たないため、非公開にすることができます。

関連する問題