Erstens bin ich kein Java-Typ, aber ich stieß auf etwas, das auf der Oberfläche als eine Inkonsistenz mit der Art und Weise erscheint, wie Importe funktionieren.Implementierung von Importen
Sagen Sie eine Datei und in dieser Datei haben Sie Ihre Hauptfunktion und Sie haben festgelegt, auch eine Klasse Foo, jetzt eine andere Implementierung von Foo existiert auch in einem Paket. Angenommen, Sie möchten beide Versionen in Ihrer Funktionalität verwenden.
Sie können Foo nicht explizit aus dem Paket importieren, d. H. import mypackage.Foo;
Da dies zu einem Konflikt mit der lokal in der Datei definierten Klasse führt, wird bei der Kompilierung ein Fehler generiert.
Was Sie können tun ist das gesamte Paket importieren, d. H. import mypackage. *;
Dies funktioniert und Sie Foo unter Verwendung der vollständig qualifizierten Namen zugreifen können, führen den einfachen Namen mit in der Verwendung der lokal Foo. Die Inkonsistenz, die ich sehe, ist, dass, während ersteres einen Fehler erzeugt (Sie haben eine Klasse importiert und der einzige Zweck des Imports darin besteht, den einfachen Namen im Gegensatz zum voll qualifizierten Namen verwenden zu können), führt letzteres nicht einmal zu a Warnung.
Ich hätte gedacht, dass beide Fälle eine Warnung generieren würden, dh Sie könnten die falsche Klasse verwenden, da sie an zwei Stellen definiert ist, oder die Importanweisung ist redundant, da die Verwendung des einfachen Namens in die lokal definierte Klasse aufgelöst wird nicht die importierte.
Also meine Frage ist: Gibt es einen Grund, warum es auf diese Weise implementiert ist?
Ja, es ist ein Ausreißer Fall, das verstehe ich.
kleiner Hinweis: Die import-Anweisung wird nur verwendet, so dass Sie den Paketnamen nicht eingeben müssen, es tut nichts anderes, es ist nur eine Verknüpfung. Wenn Sie immer den vollständig qualifizierten Namen verwenden, brauchen Sie überhaupt keine Importe. –
Ich verstehe, warum Pakete existieren, es ist nur, dass es inkonsistent scheint, auf eine Klasse in einem importierten Paket verweisen zu können und überhaupt keine Warnungen zu haben - unabhängig davon, ob eine Klasse mit diesem Namen lokal definiert ist oder nicht wenn Sie explizit versuchen, eine Klasse mit demselben Namen wie einem lokal definierten zu importieren. In beiden Fällen ist die Import-Anweisung für diese Klasse redundant, aber die eine gibt Fehler und die andere tut nichts. – Stinomus