2016-05-25 15 views
0

Können sagen, ich habe einige verschachtelte KlassenWie kann ich eine verschachtelte private static Klasse java instanziiert

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

Ich versuche, die private statische Klasse B, indem Sie die folgenden

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

sondern weil zu instanziiert B ist privat Ich kann das nicht. Was ist eine Möglichkeit, Klasse C mit einer Klasse B zu konstruieren?

+2

In welcher Klasse versuchen Sie die Instanz der Klasse C zu konstruieren? – Eran

+1

Stellen Sie einen vollständigen Code bereit, der ein [MCVE] – STaefi

+0

ist Sie versuchen, ein privates Mitglied "Klasse B" in einem öffentlichen Konstruktor der "Klasse C" zu übergeben. Das vereitelt den Zweck, "Klasse B" privat zu machen. Der einzige Ort, an dem dieser Code funktioniert, ist in Klasse A selbst. – Santosh

Antwort

3

Sie können entweder machen B nicht privat, oder eine Hilfsmethode in A bieten erstellen C:

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()); 
    } 
} 

Damit außerhalb von A, können Sie eine Instanz von C wie folgt erstellen:

A.C myc = A.create(); 

Beachten Sie, dass seit B außerhalb nicht sichtbar ist, ist der Konstruktor C nutzlos, so dass Sie das private machen können.

Verwandte Themen