pacchetto javax vs java


385

Qual è la logica alla base del pacchetto javax? Cosa succede in Java e cosa in Java?

So che molti pacchetti enterprise-y sono in javax, ma anche Swing, la nuova data e ora api (JSR-310) e altri pacchetti J2SE.



Un pacchetto opzionale è un'implementazione di un'API standard aperto (esempi di pacchetti opzionali JavaServlet, Java3D). La maggior parte dei pacchetti opzionali sono radicati nello javax.*spazio dei nomi, sebbene possano esserci delle eccezioni.
Lucky

Risposte:


212

Penso che sia una cosa storica - se un pacchetto viene introdotto come aggiunta a un JRE esistente, arriva come javax. Se viene introdotto per la prima volta come parte di un JRE (come era NIO, credo), viene inserito come java. Non sono sicuro del motivo per cui la nuova API data e ora finirà per javaxseguire questa logica però ... a meno che non sia disponibile anche separatamente come libreria per funzionare con le versioni precedenti (che sarebbe utile). Nota da molti anni dopo: alla fine è finito per esserlo java.

Credo che ci siano restrizioni sul javapacchetto - penso che i classloader siano configurati per consentire solo iljava.* caricamento delle classi all'interno rt.jaro qualcosa di simile. (C'è sicuramente un check-in ClassLoader.preDefineClass.)

EDIT: Mentre una spiegazione ufficiale (la ricerca suggerita obfish non ha prodotto uno nella prima pagina o giù di lì) è senza dubbio circa "core" vs "extension", sospetto comunque che in molti casi la decisione per un determinato pacchetto abbia un anche la ragione storica. È java.beansdavvero "core" per Java, per esempio?


7
Perché è più facile per un lettore premere alt-t e digitarlo che per me tagliare e incollare usando iPad? ;). Hai ragione, però, penso di voler dire download.oracle.com/javase/tutorial/ext/index.html . Senza offesa A proposito, di solito trovo utili le tue risposte Sono solo sorpreso che questo sia stato accettato.
orbfish

1
Il termine "javax" non appare da nessuna parte nel collegamento suggerito in precedenza in questo thread di commenti.
opuscolo del

La nuova API data e ora finirà per essere come java.timedopotutto.
Michael Piefel,

234

Inizialmente javaxera destinato alle estensioni, e talvolta le cose venivano promosse da javaxjava.

Un problema era Netscape (e probabilmente IE) che limitava le classi che potevano essere nel pacchetto java.

Quando Swing è stato impostato per "laurearsi" javada javaxlì c'è stata una sorta di mini-esplosione perché le persone hanno capito che avrebbero dovuto modificare tutte le loro importazioni. Dato che la retrocompatibilità è uno degli obiettivi principali di Java, hanno cambiato idea.

A quel punto nel tempo, almeno per la comunità (forse non per il Sole) l'intero punto javaxera perduto. Quindi ora abbiamo alcune cose in javax che probabilmente dovrebbero essere presenti java... ma a parte le persone che hanno scelto i nomi dei pacchetti, non so se qualcuno possa capire quale sia la logica caso per caso.


12
"Quando Swing è stato impostato per" laurearsi "in java da javax, c'è stata una sorta di mini-esplosione perché le persone hanno capito che avrebbero dovuto modificare tutte le loro importazioni." Le persone si lamentavano di qualcosa che poteva essere realizzato con una regex che era il risultato del loro uso del codice di qualità pre-produzione?
Slitta

10
Sì. Ho scritto uno strumento in Visual Cafe per la conversione tra i due (javax e java) prima che Sun decidesse di tenerlo nel pacchetto javax.
TofuBeer,

51

javai pacchetti sono di base e i javaxpacchetti sono estensioni.

Swing era un'estensione perché AWT era l'API UI originale. Swing è arrivato dopo, nella versione 1.1.


Swing non faceva parte della 1.1. Esisteva una versione di Swing in esecuzione su 1.1 come libreria.
Tom Hawtin - tackline

C'è la chiave - "libreria", non parte del JDK. Ho la versione sbagliata? I miei javadocs suggeriscono che JButton è stato dalla 1.3, quindi forse la mia memoria mi ha deluso.
duffymo,

1
Quindi perché la nuova API di data e ora in javax .. data e ora non è "base"?
Pacerier,

1
"... la nuova data e ora api (JSR-310) ..." - qualcuno di Oracle / Sun ha deciso che sarebbe stato meglio inserirlo in javax, perché è una nuova estensione delle librerie di base. Se non sei d'accordo, è meglio prenderlo con loro.
Duffymo,

Solo per riferimento: hanno annullato quella decisione e JSR-310 è stato messo sotto java.time: docs.oracle.com/javase/8/docs/api/java/time/…
Mark Rotteveel,

37

Lo spazio dei nomi javax è in genere (che è una parola caricata) utilizzato per le estensioni standard, attualmente noto come pacchetti opzionali . Le estensioni standard sono un sottoinsieme delle API non core; l'altro segmento delle API non core ha ovviamente chiamato le estensioni non standard, occupando gli spazi dei nomi come com.sun. * o com.ibm. . Le API principali occupano Java. namespace.

Non tutto nel mondo delle API Java inizia nel core, motivo per cui le estensioni di solito nascono da richieste JSR. Alla fine vengono promossi al centro sulla base di "consigli saggi".

L'interesse per questa nomenclatura è emerso da un passo falso da parte di Sun: le estensioni avrebbero potuto essere promosse al centro, cioè spostate da javax. * A java. * Rompendo la promessa di compatibilità all'indietro. I programmatori gridavano rauco e prevaleva il buon senso. Questo è il motivo per cui l'API Swing, sebbene parte del core, continua a rimanere nello spazio dei nomi javax. *. Ed è anche così che i pacchetti vengono promossi dalle estensioni al core: sono semplicemente resi disponibili per il download come parte di JDK e JRE.


2

Javax era solo per le estensioni. Eppure dopo Sun lo ha aggiunto alla libreria Java dimenticando di rimuovere la x. Gli sviluppatori hanno iniziato a creare codice con javax. Eppure in seguito i soli hanno deciso di cambiarlo in java. Agli sviluppatori non piaceva l'idea perché il loro codice sarebbe stato rovinato ... quindi javax è stato mantenuto.


1

I pacchetti java. * sono i pacchetti principali del linguaggio Java, il che significa che i programmatori che usano il linguaggio Java dovevano usarli per fare un uso proficuo del linguaggio java.

I pacchetti javax. * sono pacchetti opzionali, che forniscono un modo standard e scalabile per rendere le API personalizzate disponibili per tutte le applicazioni in esecuzione sulla piattaforma Java.


0

Inizialmente alcuni pacchetti come javax.swingnon erano inclusi nella libreria standard java. La società Sun ha deciso di considerarli ufficiali e li ha inclusi nelle prime versioni di Java come librerie standard o estensioni standard.

Per convenzione, tutte le estensioni standard iniziano con un Xpo 'che possono essere promosse nel tempo di prima classe come quello che è successo javax.swing.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.