2009-04-07 11 views
283

Qual è la logica alla base del pacchetto javax? Cosa succede a java e cosa succede a javax?javax vs pacchetto java

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

+3

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

+0

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

risposta

159

Penso che sia una cosa storica: se un pacchetto viene introdotto come aggiunta a un JRE esistente, viene fornito come javax. Se è stato introdotto per la prima volta come parte di un JRE (come lo era NIO, credo), viene fornito come java. Non sono sicuro del perché la nuova API data e ora finirà come javax seguendo questa logica però ... a meno che non sia disponibile anche separatamente come libreria per lavorare con le versioni precedenti (che sarebbe utile). Nota di molti anni più tardi: in realtà è finito per essere in java dopo tutto.

Credo che ci siano restrizioni sul pacchetto di java - penso classloader sono impostati per solo consentire classi all'interno java.* per essere caricato da rt.jar o qualcosa di simile. (C'è certamente un assegno

MODIFICA: Mentre una spiegazione ufficiale (la ricerca o la proposta suggerita non ne portava uno nella prima pagina o giù di lì) è senza dubbio su "core" vs "estensione", io ancora sospetto che in molti casi la decisione per ogni particolare pacchetto abbia anche una ragione storica. java.beans è davvero "core" per Java, ad esempio?

+6

Perché è più facile per un lettore colpire alt-t e digitarlo piuttosto che da me per tagliare e incollare usando iPad? ;). Hai ragione, però, io * penso * intendevo http://download.oracle.com/javase/tutorial/ext/index.html. Senza offesa BTW Di solito trovo le tue risposte utili 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. – pamphlet

+0

La nuova data e ora API in realtà finirà come 'java.time' dopo tutto. –

41

I pacchetti java sono "base" ei pacchetti javax sono estensioni.

Swing era un'estensione perché AWT era l'API dell'interfaccia utente originale. Swing è venuto dopo, nella versione 1.1.

+0

L'oscillazione non faceva parte di 1.1. C'era una versione di Swing che girava su 1.1 come libreria. –

+0

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

+1

Allora, perché la nuova data e ora API in javax .. data e ora non è "base"? – Pacerier

31

Il dominio javax è in genere (ovvero una parola caricata) utilizzato per le estensioni standard, attualmente noto come optional packages. Le estensioni standard sono un sottoinsieme delle API non core; l'altro segmento delle API non core ha ovviamente chiamato estensioni non standard, occupando gli spazi dei nomi come com.sun. * o com.ibm. . Le API di base occupano java. Spazio dei nomi.

Non tutto nel mondo dell'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 "saggi consigli".

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

+1

ben messo, signore. questo dovrebbe essere stato accettato qui. –

180

originariamente javax era destinato a essere utilizzato per le estensioni, e talvolta le cose sarebbero promosse da javax a java.

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

Quando Swing è stato impostato su "laureato" su java da javax, si è verificata una sorta di mini-up perché le persone si sono rese conto 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 Sun) l'intero punto di javax è stato perso. Quindi ora abbiamo alcune cose in javax che probabilmente dovrebbero essere in java ... ma a parte le persone che hanno scelto i nomi dei pacchetti, non so se qualcuno possa capire quale sia la base logica per ogni caso.

+8

"Quando Swing è stato impostato su" laureato "su java da javax, si è verificata una sorta di mini-up perché le persone si sono rese conto 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 di loro usando il codice di qualità preproduciton? – ArtB

+8

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

+10

questo dovrebbe essere il ans – Pacerier

0

java. * I pacchetti sono i pacchetti di lingua Java principali, il che significa che i programmatori che utilizzano il linguaggio Java devono usarli per fare un uso utile del linguaggio java.

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

1

Javax era utilizzato solo per le estensioni. Eppure più tardi il sole l'ha aggiunto alla libreria java dimenticandosi di rimuovere la x. Gli sviluppatori hanno iniziato a creare codice con javax. Eppure in seguito i soli del tempo hanno deciso di cambiarlo in java. Agli sviluppatori non è piaciuta l'idea perché il codice sarebbe rovinato ... quindi javax è stato mantenuto.

Problemi correlati