Betrachten Sie das folgende einfache Codebeispiel:
%Vor%Wenn wir versuchen, diesen Code zu kompilieren, erhalten wir die Fehlermeldung:
%Vor% Dies könnte durch Einführung des statischen Imports von enum
:
import static
... TestStaticImport.Branches.*
Aber in diesem Moment beginnen unverständliche Dinge (für mich):
Diese Lösung funktioniert gut, alles ist gut kompiliert, bis die Klasse TestStaticImport
in ein leeres root-Paket verschoben wird, d. h. es gibt keine
package blablabla;
am Anfang dieser Java-Datei;
Codezeile: import static TestStaticImport.Branches.*;
wird als gültiger Code in meinem Intellij IDEA hervorgehoben (der Name der IDE spielt keine Rolle, nur zur Information), aber wenn ich versuche, solchen Code zu kompilieren, erscheint der folgende Fehler:
java: package TestStaticImport does not exist
Also, es gibt tatsächlich zwei Fragen:
1) Hauptfrage : Warum ist import static
aus einem leeren Verzeichnis nicht möglich?
2) Was ist ein anderer Weg (wenn es existiert), um Code-Verweise auf enum-Felder zuzulassen, die nur ihre Namen verwenden (d. h. APPLE
anstelle von Branches.APPLE
), außer statischem Import?
P.S. Bitte, sag mir nicht, dass leere Pakete hässlicher Stil sind und so weiter. Diese Frage ist nur ein theoretisches Problem.
Die Java-Sprachspezifikation verbietet alle Importe aus dem unbenannten Paket:
Ein Typ in einem unbenannten Paket (§7.4.2) hat keinen kanonischen Namen, also der Voraussetzung für einen kanonischen Namen in jeder Art von Import-Deklaration impliziert, dass (a) Typen in einem unbenannten Paket nicht importiert werden können, und (b) Statische Elemente von Typen in einem unbenannten Paket können nicht importiert werden. Daher benötigen §7.5.1, §7.5.2, §7.5.3 und §7.5.4 alle eine Kompilierzeit Fehler bei jedem Versuch, einen Typ (oder ein statisches Element davon) in ein Verzeichnis zu importieren unbenanntes Paket.
In früheren Zeiten mussten die Java-Erfinder Java-Typen zu Dateien zuordnen, damit der Compiler echte Arbeit leisten konnte. Sie beschlossen, Pakete zu Ordnern und Typen zu Dateien zuzuordnen. Das hat ziemlich gut funktioniert. Es stellt vor allem den emotionalen Hintergrund für Newcomer dar: "Ich hasse dich. Leg dich nicht mit mir an." Aber ich schweife ab.
Das Standardpaket ist jedoch ein Problem, da es keinen gut definierten Ordner gibt. Wenn Sie das Paket com
haben, wissen Sie, dass es irgendwo einen Ordner com
gibt, aber wie lautet der Name des Ordners für das Standardpaket?
Also entschieden die Designer, dass import
und Standardpaket nicht gemischt werden. Tatsächlich erhalten Sie einen Fehler, wenn Sie versuchen, etwas zu importieren, das kein Paket enthält (also import TestStaticImport
ohne static
und *
würde ebenfalls fehlschlagen). Siehe So importieren Sie eine Klasse aus dem Standardpaket
Das Problem ist also nicht der statische Import, sondern dass Sie versuchen, aus dem Standard-Paket zu importieren.
Wie bei einigen anderen Fällen in Java gibt es keine Lösung.
Tags und Links java importerror