Vous ne pouvez pas utiliser les classes du paquetage par défaut à partir d'un paquetage nommé.
( Techniquement vous le pouvez, comme le montre l'article de Sharique Abdullah. réponse par le biais de l'API de réflexion, mais les classes de l'espace de nom sans nom sont pas dans le champ d'application dans un déclaration d'importation )
Avant J2SE 1.4, vous pouviez importer des classes à partir du paquetage par défaut en utilisant une syntaxe comme celle-ci :
import Unfinished;
C'est n'est plus autorisé . Ainsi, pour accéder à une classe de package par défaut à partir d'une classe de package, il faut déplacer la classe de package par défaut dans un package qui lui est propre.
Si vous avez accès à la source générée par groovy, un certain post-traitement est nécessaire pour déplacer le fichier dans un paquetage dédié et ajouter cette directive "package" à son début.
Mise à jour 2014 : bug 6975015 pour JDK7 et JDK8, décrivent un processus d'amélioration de la qualité des services. plus stricte interdiction d'importer à partir d'un paquet sans nom.
Le site TypeName
doit être le nom canonique d'un type de classe, d'interface, d'énumération ou d'annotation.
Le type doit être soit un membre d'un paquet nommé ou un membre d'un type dont le type lexical le plus extérieur est un membre d'un paquet nommé , ou une erreur de compilation se produit .
Andreas souligne dans les commentaires :
"pourquoi [le paquet par défaut] est-il là en premier lieu ? erreur de conception ?"
Non, c'est délibéré.
JLS 7.4.2. Paquets sans nom dit : "Les paquets sans nom sont fournis par la plate-forme Java SE principalement pour des raisons de commodité lors du développement d'applications petites ou temporaires ou lors du début du développement".