Sie können im Standardpaket keine Klassen aus einem benannten Paket verwenden.
( Technisch gesehen kann man, wie in Sharique Abdullah gezeigt Antwort durch Reflexion API, sondern Klassen aus dem unbenannter Namen sind in ihrem Umfang nicht in einer Einfuhranmeldung )
Vor J2SE 1.4 konnten Sie Klassen aus dem Standardpaket mit einer Syntax wie der folgenden importieren:
import Unfinished;
Das ist nicht mehr erlaubt . Um von einer Paketklasse aus auf eine Standardpaketklasse zugreifen zu können, muss die Standardpaketklasse in ein eigenes Paket verschoben werden.
Wenn Sie Zugriff auf die von groovy generierte Quelle haben, ist eine Nachbearbeitung erforderlich, um die Datei in ein dediziertes Paket zu verschieben und diese "Paket" -Anweisung am Anfang hinzuzufügen.
Update 2014: Fehler 6975015 für JDK7 und JDK8 beschreibt ein noch strengeres Verbot des Imports aus unbenannten Paketen.
Dies TypeName
muss der kanonische Name eines Klassentyps, Schnittstellentyps, Aufzählungstyps oder Anmerkungstyps sein.
Der Typ muss entweder ein Mitglied eines benannten Pakets sein oder ein Mitglied eines Typs, dessen äußerster lexikalisch einschließender Typ ein Mitglied eines benannten Pakets ist. Andernfalls tritt ein Fehler bei der Kompilierung auf .
Andreas weist in den Kommentaren darauf hin :
"Warum gibt es [das Standardpaket] überhaupt? Designfehler?"
Nein, es ist absichtlich.
JLS 7.4.2. In unbenannten Paketen heißt es: "Unbenannte Pakete werden von der Java SE-Plattform hauptsächlich zur Vereinfachung bei der Entwicklung kleiner oder temporärer Anwendungen oder zu Beginn der Entwicklung bereitgestellt."
In der Tat können Sie.
Mit der Reflections-API können Sie bisher auf jede Klasse zugreifen. Zumindest konnte ich :)
quelle
val bar = "hi"; val fooClass = Class.forName("FooClass"); val fooMethod = fooClass.getMethod("foo", classOf[Array[String]]); val fooReturned = fooMethod.invoke(fooClass.newInstance(), Array(bar));
Class.forName("FooBar").newInstance().fooMethod("I did it")
Verwenden Sie jarjar , um die JAR-Datei mit der folgenden Regel neu zu verpacken:
Alle Klassen im Standardpaket der Quell-JAR-Datei werden in das Zielpaket verschoben und können somit darauf zugreifen.
quelle
Sie können Pakete in der verwenden
Groovy
Code verwenden, und die Dinge werden gut funktionieren.Es kann eine geringfügige Neuorganisation des Codes unter
grails-app
und zunächst ein wenig schmerzhaft bedeuten , aber bei einem großen Grails-Projekt ist es nur sinnvoll, die Dinge in Paketen zu organisieren. Wir verwenden die Java-Standardpaket-Namenskonventioncom.foo.<app>.<package>
.Wenn Sie feststellen, dass alles im Standardpaket enthalten ist, wird dies die Integration behindern.
Controller scheinen das einzige Grails-Artefakt (oder Artefakt) zu sein, das sich nicht in ein Java-Paket einfügt. Wahrscheinlich habe ich das noch nicht herausgefunden
Convention
. ;-);quelle
Nur um die Idee zu vervollständigen:
Innerhalb des Standardpakets können Sie auf Objekte zugreifen, die sich in benannten Paketen befinden.
quelle