2016-08-14 1 views
1

Ich weiß die Bedeutung von verschachtelte statische Klassen, aber es war verwirrend manchmal zu entscheiden, wann sie über nicht statische verschachtelte Klassen zu deklarieren.Wann ist es eine gute Idee, verschachtelte statische Klassen gegenüber nicht statischen verschachtelten Klassen zu deklarieren?

ist es vor allem, wenn Instanziierung kein gutes Gefühl sein würde?

Was sind die allgemeinen Regeln des Daumens, die Ihnen helfen zu entscheiden, wann Sie statische Modifikator verwenden? richtig

+2

Diese Antwort sollte helfen: http://stackoverflow.com/a/70613/5221346 – Gendarme

Antwort

2

Dies ist eine sehr interessante Frage. Ich würde versuchen, es dir zu erklären.

Eine verschachtelte Klasse ist ein Mitglied ihrer einschließenden Klasse. Nicht statische verschachtelte Klassen (innere Klassen) haben Zugriff auf andere Mitglieder der umschließenden Klasse , auch wenn sie als privat deklariert sind. Statisch verschachtelte Klassen haben keinen Zugriff auf andere Member der umschließenden Klasse.

Grundsätzlich ist eine statische geschachtelte Klasse interagiert mit den Instanzelemente seiner obersten Ebene Klasse, genauso wie alle anderen Klassen.

Also im Grunde können und sollten Sie eine statische geschachtelte Klasse als eine Top-Level-Klasse betrachten, die nur in einer anderen Top-Level-Klasse geschachtelt wurde nur für die Verpackung Bequemlichkeit.

Also, wenn Sie eine verschachtelte Klasse verwenden, Start durch statische machen, und dann sehen, wenn Sie irgendwelche Instanz Mitglieder zugreifen müssen dabei die Möglichkeit, die es nicht statisch zu machen.

Nehmen wir das Beispiel von JDK,

public class LinkedList<E> ... { 
... 

private static class Entry<E> { ... } 

} 

Hier ist die Entry eine statische verschachtelte Klasse, wie es für diese Klasse eine Klasse der obersten Ebene sein macht keinen Sinn machen, wie es durch die verwendet wird, LinkedList Klasse nur. Und da es überhaupt keine Mitglieder der LinkedList Klasse verwendet, macht machen statische macht noch mehr Sinn.

0

Sie sollten die static Feld, Methode oder Klasse verwenden, wann immer Sie können und der Code immer noch und arbeitet kompiliert.

Wenn der Code würde, wenn Sie nicht kompiliert oder nicht funktionieren, es statisch gemacht, es nicht statisch machen.

+1

Ich denke, die Frage fragt nur über Klassen, nicht Felder und Methoden –

0

würden Sie eine statische Klasse verwenden, wenn Sie nicht-statische (oder Instanz) Felder der Klasse der obersten Ebene und die Top-Level-Klasse eine Instanz davon nicht zugreifen müssen nicht die Klasse wollen.

Verwenden Sie immer eine static innere Klasse, wenn Sie nicht eine nicht-statische Klasse verwenden können. Dies hält den Code einfacher und effizienter.

Verwandte Themen