2013-12-13 6 views
5

Warum enthält import one.two.* nicht import one.two.three.MyClass? Sollte Java nicht etwas wie haben? Oder gibt es irgendeinen Grund (anders als sie es nicht getan haben, nicht dass sie es nicht konnten)?Warum hat Java keinen "tiefen" Platzhalterimport?

Dank

+0

Ich benutze nicht einmal eine einzelne Schicht des Pakets. * Wenn ich ehrlich bin, weil das ist die Art, wie meine IDE sie hineinstellt, aber es macht, wo Klassen von klarerem kamen –

Antwort

8

Java behandelt Pakete nicht so, als würden sie sich wirklich gegenseitig untergliedern. während java.util und java.util.concurrency aussehen könnte wie die zweite ist irgendwie Teil der ersten, werden sie als völlig unabhängig behandelt und der Punkt ist meist da für Ordentlichkeit.

Das bedeutet, dass Sie keine Angst davor haben müssen, Ihre Klasse oder Schnittstelle zu einem späteren Zeitpunkt in einem Super- oder Subpaket zu deklarieren, und das bedeutet auch, dass Sie wirklich nur ein paar schreiben sollten zusätzliche Linien von Importen.

Die Gründe für diese Entscheidung, wie Peter Lawrey erklärte, stammen von Javas genereller Tendenz zur Einfachheit. Es empfiehlt sich, Import-Wildcards überhaupt niemals zu verwenden.

4

Java behandelt jedes Paket als unabhängig. Zum Beispiel erstreckt sich das Paket local nicht auf irgendwelche "Sub" -Pakete. Ich vermute, dass die Verwendung der Hierarchie auf eine sinnvolle Weise wertvoll wäre, aber das Design von Java bestand darin, alles so einfach wie möglich zu machen.

Oder gibt es einen Grund (außer sie taten es einfach nicht, nicht dass sie es nicht konnten)?

Das Problem ist Abwärtskompatibilität, die ältere Programme brechen kann. Ich vermute, das ist lösbar.

In Wahrheit verwalten die meisten IDEs Ihre Importe für Sie und ich sehe meine Importe nicht einmal mehr an. Sicherlich ist das Vermeiden von import * vorzuziehen, damit alle Klassen explizit importiert werden.

Verwandte Themen