2011-10-21 7 views
48

¿El uso del paquete predeterminado de Java es una mala práctica?¿El uso del paquete predeterminado de Java es una mala práctica?

+0

Tengo vagos recuerdos de problemas que surgen del uso del paquete predeterminado cuando trato de referirme a las clases en ese paquete desde otros paquetes 'reales'. – Oliver

+4

Sí, a menos que esté escribiendo un código desechable. – aroth

+5

Depende de lo que estés haciendo. Para la tarea de una clase de Java está bien. Cualquier otra cosa: simplemente colóquelo en un paquete con nombre y estará a salvo. –

Respuesta

54

Sí, lo es. Idealmente, los nombres de los paquetes deben ser únicos a nivel mundial, para evitar el nombramiento de colisiones. Usar el paquete predeterminado rompe esta convención. También es imposible importar una clase del paquete predeterminado.

¿Por qué existen paquetes sin nombre, si es una mala idea? De the JLS §7.4.2:

Unnamed packages are provided by the Java platform principally for convenience when developing small or temporary applications or when just beginning development.

+1

... Hasta que alguien más tenga la misma línea de pensamiento que usted. ¿Cuál es el problema con solo usar un paquete con nombre? –

+0

@irreputable Me gusta tu lógica. – Michael

+3

... sí, pero luego les preocupaba la gente como yo, así que todos decidieron no usarla. – irreputable

1

Sí, lo es. El problema es que no es posible importar clases desde el paquete predeterminado.

20

Hay problemas en muchos niveles diferentes:

  • no puede importar clases del paquete por defecto de clases que no son
  • obtendrá problemas de carga Clase si intente resolver el paquete predeterminado en varios artefactos
  • ya no puede usar el alcance predeterminado y protegido como lo hace normalmente
  • no hay nada obvio distinción entre su código y otro código
3

Sí lo es. Como han indicado otras respuestas, no puede cargar clases desde el paquete predeterminado.

ver que respuestas:

How to import a class from default package
How to access java-classes in the default-package?

Sin embargo, log4j requiere que la configuración se encuentra en el paquete por defecto. Esto es lo único que es razonable mantener allí.

Editar: Como Sean Patrick Floyd y Michael han señalado en los comentarios, puede poner cualquier archivo de configuración en el paquete predeterminado. Gracias a ambos por señalarme esto.

+3

No solo log4j config, muchos tipos de datos de configuración. Pero no las clases de Java –

+0

Los archivos de configuración de Spring (applicationContext.xml) suelen ir aquí también. – Michael

+1

@SeanPatrickFloyd son comentarios como este que me ayudan a mejorar mis habilidades. Gracias. –

Cuestiones relacionadas