Est-il possible d'importer une classe dans Java qui est dans le package par défaut? Si oui, quelle est la syntaxe? Par exemple, si vous avez
package foo.bar;
public class SomeClass {
// ...
dans un seul fichier, vous pouvez écrire
package baz.fonz;
import foo.bar.SomeClass;
public class AnotherClass {
SomeClass sc = new SomeClass();
// ...
dans un autre fichier. Mais que faire si SomeClass.Java ne contient pas de déclaration de package? Comment feriez-vous référence à SomeClass
dans AnotherClass
?
Vous ne pouvez pas importer de classes à partir du package par défaut. Vous devez éviter d'utiliser le package par défaut, sauf pour les très petits exemples de programmes.
De la spécification du langage Java :
Il s'agit d'une erreur de compilation pour importer un type à partir du package sans nom.
La seule façon d'accéder aux classes du package par défaut est à partir d'une autre classe du package par défaut. Dans ce cas, ne vous embêtez pas à import
, référez-vous-y directement.
Ce n'est pas possible.
L'alternative utilise la réflexion:
Class.forName("SomeClass").getMethod("someMethod").invoke(null);
Ce n'est pas du tout une erreur de compilation! Vous pouvez importer un package par défaut dans une classe de package par défaut uniquement.
Si vous le faites pour un autre paquet, ce sera une erreur de compilation.
Comme d'autres l'ont dit, c'est une mauvaise pratique, mais si vous n'avez pas le choix car vous devez vous intégrer à une bibliothèque tierce qui utilise le package par défaut, vous pouvez créer votre propre classe dans le package par défaut et accéder à la autre classe de cette façon. Les classes du package par défaut partagent essentiellement un seul espace de noms, vous pouvez donc accéder à l'autre classe même si elle réside dans un fichier JAR distinct. Assurez-vous simplement que le fichier JAR se trouve dans le chemin de classe.
Cette astuce ne fonctionne pas si votre classe n'est pas dans le package par défaut.