2009-04-07 12 views
283

¿Cuál es la razón detrás del paquete javax? ¿Qué entra en java y qué en javax?javax vs java package

Sé que muchos paquetes de enterprise-y están en javax, pero también lo es Swing, la nueva fecha y hora api (JSR-310) y otros paquetes de J2SE.

+3

JSR 310 en 'java.time' now http://download.java.net/jdk8/docs/api/java/time/package-summary.html –

+0

Un paquete opcional es una implementación de una API estándar abierta (ejemplos de paquetes opcionales 'JavaServlet',' Java3D'). La mayoría de los paquetes opcionales están enraizados en el espacio de nombres 'javax. *', Aunque puede haber excepciones. – Lucky

Respuesta

159

Creo que es algo histórico: si un paquete se presenta como una adición a un JRE existente, viene como javax. Si se introdujo por primera vez como parte de un JRE (como NIO, creo) entonces viene como java. No estoy seguro de por qué la nueva API de fecha y hora terminará como javax siguiendo esta lógica ... a menos que también esté disponible por separado como una biblioteca para trabajar con versiones anteriores (lo cual sería útil). Nota de muchos años después: en realidad terminó en java después de todo.

Creo que hay restricciones en el paquete java - Creo cargadores de clases están configurados para permitir única clases dentro java.* para ser cargado desde rt.jar o algo similar. (Ciertamente hay un cheque en ClassLoader.preDefineClass.)

EDITAR: Si bien una explicación oficial (el orbfish de búsqueda sugerido no produjo uno en la primera página más o menos) es sin duda sobre "núcleo" vs "extensión", todavía sospecho que en muchos casos la decisión de cualquier paquete en particular también tiene una razón histórica. ¿Es java.beans realmente ese "núcleo" de Java, por ejemplo?

+6

¿Porque es más fácil para un lector pulsar Alt-T y escribirlo que cortar y pegar usando iPad? ;). Sin embargo, tienes razón, creo * Me refería a http://download.oracle.com/javase/tutorial/ext/index.html. Sin ánimo de ofender Por lo general, creo que sus respuestas son útiles. Estoy sorprendido de que esta haya sido aceptada. – orbfish

+1

El término "javax" no aparece en ningún lugar del enlace sugerido anteriormente en este hilo de comentarios. – pamphlet

+0

La nueva API de fecha y hora terminará en realidad como 'java.time' después de todo. –

41

los paquetes de Java son "base", y los paquetes de javax son extensiones.

Swing era una extensión porque AWT era la API original de UI. Swing vino después, en la versión 1.1.

+0

Swing no era parte de 1.1. Hubo una versión de Swing que se ejecutó en 1.1 como una biblioteca. –

+0

Existe la clave - "biblioteca", que no forma parte del JDK. ¿Tengo la versión incorrecta? Mis javadocs sugieren que JButton ha estado desde 1.3, así que tal vez mi memoria me falló. – duffymo

+1

Entonces, ¿por qué la nueva fecha y hora API en javax ... la fecha y la hora no son "base"? – Pacerier

31

El espacio de nombres de javax es generalmente (es una palabra cargada) utilizado para extensiones estándar, actualmente conocido como optional packages. Las extensiones estándar son un subconjunto de las API no centrales; el otro segmento de las API no centrales obviamente llama a las extensiones no estándar, ocupando los espacios de nombres como com.sun. * o com.ibm. . Las API centrales toman el java. espacio de nombres.

No todo en el mundo de la API de Java comienza en el núcleo, razón por la cual las extensiones generalmente surgen de las solicitudes de JSR. Finalmente son promovidos al núcleo en base a un "consejo sabio".

El interés en esta nomenclatura surgió de un error de la parte de Sun: las extensiones podrían haber sido promovidas al núcleo, es decir, trasladadas de javax. * A java. * Rompiendo la promesa de compatibilidad con versiones anteriores. Los programadores lloraron roncamente, y mejor sentido prevaleció. Esta es la razón por la cual, la API de Swing, aunque parte del núcleo, continúa permaneciendo en el espacio de nombres javax. *. Y también es así como se promocionan los paquetes desde las extensiones al núcleo: simplemente están disponibles para su descarga como parte de JDK y JRE.

+1

bien puesto, señor. esto debería haber sido aceptado aquí. –

180

originalmente javax estaba destinado a ser para extensiones, y algunas veces las cosas se promocionarían desde javax a java.

Un problema fue Netscape (y probablemente IE) que limitaba las clases que podrían estar en el paquete java.

Cuando Swing fue configurado para "graduarse" a java desde javax hubo una especie de mini-explosión porque la gente se dio cuenta de que tendrían que modificar todas sus importaciones. Dado que la compatibilidad con versiones anteriores es uno de los objetivos principales de Java, cambiaron de opinión.

En ese momento, al menos para la comunidad (tal vez no para Sun) se perdió todo el sentido de javax. Así que ahora tenemos algunas cosas en javax que probablemente deberían estar en Java ... pero aparte de las personas que eligieron los nombres de los paquetes, no sé si alguien puede averiguar cuál es la razón de ser caso por caso.

+8

"Cuando Swing se estableció en" graduarse "a java desde javax hubo una especie de mini-explosión porque la gente se dio cuenta de que tendrían que modificar todas sus importaciones". ¿La gente se quejaba de algo que se podía lograr con una expresión regular que era resultado de usar código de calidad de preproducción? – ArtB

+8

Sí. Escribí una herramienta en Visual Cafe para convertir entre los dos (javax y java) antes de que Sun decidiera guardarlo en el paquete javax. – TofuBeer

+10

esto debería haber sido el ans – Pacerier

0

java. * Los paquetes son los paquetes principales de Java, lo que significa que los programadores que usan el lenguaje Java deben usarlos para hacer un uso valioso del lenguaje Java.

Los paquetes javax. * Son paquetes opcionales, que proporcionan una forma estándar y escalable de hacer que las API personalizadas estén disponibles para todas las aplicaciones que se ejecutan en la plataforma Java.

1

Javax solía ser solo para extensiones. Sin embargo, más tarde sun lo agregó a la biblioteca java olvidando eliminar la x. Los desarrolladores comenzaron a hacer código con javax. Sin embargo, más adelante en el tiempo, los soles decidieron cambiarlo a Java. A los desarrolladores no les gustó la idea porque su código se arruinaría ... así que se guardó javax.