web-dev-qa-db-fra.com

L'utilisation du package par défaut de Java est-elle une mauvaise pratique?

L'utilisation du package par défaut de Java est-elle une mauvaise pratique?

49
H2ONaCl

Oui, ça l'est. Idéalement, les noms de packages devraient être globalement uniques, pour éviter les collisions de noms. L'utilisation du package par défaut rompt cette convention. Il est également impossible d'importer une classe à partir du package par défaut.

Pourquoi existe-t-il des packages sans nom, si c'est une si mauvaise idée? De le JLS §7.4.2 :

Les packages sans nom sont fournis par la plate-forme Java principalement pour des raisons de commodité lors du développement de petites applications ou d'applications temporaires ou au tout début du développement.

56
Matt Ball

Il existe des problèmes à différents niveaux:

  • vous ne pouvez pas importer des classes dans le package par défaut à partir de classes qui ne sont pas
  • vous obtiendrez des problèmes de chargement de classe si vous essayez de résoudre le package par défaut dans plusieurs artefacts
  • vous ne pouvez plus utiliser la portée par défaut et protégée comme vous le faites normalement
  • il n'y a pas de distinction évidente entre votre code et un autre code
20
Sean Patrick Floyd

Oui, ça l'est. Comme d'autres réponses l'ont indiqué, vous ne pouvez pas charger de classes à partir du package par défaut.

Voir SO réponses:

Comment importer une classe à partir du package par défaut
Comment accéder aux classes Java dans le package par défaut?

Cependant, log4j nécessite que la configuration se trouve dans le package par défaut. C'est la seule chose qui soit raisonnable pour y rester.

Edit: Comme Sean Patrick Floyd et Michael l'ont souligné dans les commentaires, vous pouvez mettre tous les fichiers de configuration dans le package par défaut. Merci à vous deux de me l'avoir signalé.

3
Jonathan Spooner

Oui, ça l'est. Le problème est qu'il n'est pas possible d'importer des classes à partir du package par défaut.

1
Mathias Schwarz