Ich versuche, eine Situation zu denken, wo ich könnte einen nicht statischen inneren Typen (Klasse) innerhalb einer anderen Klasse (anders als die Situation weiter unten diskutiert) zu erklären, können Sie den folgenden CodeJava verschachtelte Typen Szenarien
betrachtenpublic class OuterClass {
public int OuterMember;
public static class StaticInner{
public int x;
}
public class NonStaticInner{
public int x;
public int y = OuterMember; // none static nested type can access parent members
}
public NonStaticInner getNonStaticInner(){
return new NonStaticInner();
}
}
public class TestClass {
public OuterClass.StaticInner staticObject = new OuterClass.StaticInner();
public OuterClass outer = new OuterClass();
public OuterClass.NonStaticInner nonStaticObject = outer.getNonStaticInner();
public TestClass()
{
nonStaticObject.y = 5;
nonStaticObject.x = 7;
staticObject.x = 2;
}
}
jetzt ist meine Frage: wenn ich keine Schließung innerhalb nonStaticObject brauchte oder mit anderen Worten, wenn ich nicht auf "OuterMember" von innerhalb von NonStaticInner zugreifen musste, gibt es irgendeinen Wert, NonStaticInner als nicht statisch zu erklären? Schließlich kann ich beliebig viele Instanzen von NonStaticInner oder StaticInner erstellen, außer dass ich für StaticInner keine Instanz von "OuterClass" benötige.
Sie sollten im Allgemeinen statische vorziehen, wenn die innere Klasse nicht an eine bestimmte Instanz der äußeren Klasse gebunden ist. – shmosel
In Java gibt es keine solche "statische innere Klasse", da eine innere Klasse in Java definitionsgemäß eine nicht-statische geschachtelte Klasse ist. –
@LewBloch Ich wollte sagen (oder tat tatsächlich) statisch innerer Typ –