web-dev-qa-db-fra.com

Quelle est la syntaxe pour importer une classe dans un package par défaut en Java?

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?

49
Pops

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.

100
Dan Dyer

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.

34
Dan

Ce n'est pas possible.

L'alternative utilise la réflexion:

 Class.forName("SomeClass").getMethod("someMethod").invoke(null);
12
OscarRyz

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.

3
vishal rajput

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.

1
Rob H