Un package optionnel est une implémentation d'une API standard ouverte (exemples de packages optionnels JavaServlet, Java3D). La plupart des packages facultatifs sont enracinés dans l' javax.*espace de noms, bien qu'il puisse y avoir des exceptions.
Lucky
Réponses:
212
Je pense que c'est une chose historique - si un package est introduit comme un ajout à un JRE existant, il se présente sous la forme javax. Si elle est introduite pour la première fois dans le cadre d'un JRE (comme NIO l'était, je crois), elle se présente sous la forme java. Je ne sais pas pourquoi la nouvelle API de date et d'heure finira par javaxsuivre cette logique ... à moins qu'elle ne soit également disponible séparément en tant que bibliothèque pour fonctionner avec les versions antérieures (ce qui serait utile). Remarque de nombreuses années plus tard: après tout, il a finalement été javautilisé.
Je crois qu'il y a des restrictions sur le javapaquet - je pense que les chargeurs de classe sont configurés pour autoriser uniquementjava.* le chargement des classes à l'intérieur rt.jarou quelque chose de similaire. (Il y a certainement un enregistrement ClassLoader.preDefineClass.)
EDIT: Bien qu'une explication officielle (la recherche orbfish suggérée n'en a pas donné une dans la première page) ne fait aucun doute sur "noyau" vs "extension", je soupçonne toujours que dans de nombreux cas, la décision pour un paquet particulier a un raison historique derrière cela aussi. Est-ce java.beansvraiment ce «noyau» de Java, par exemple?
Parce qu'il est plus facile pour un lecteur d'appuyer sur alt-t et de le taper que pour moi de couper et coller à l'aide de l'iPad? ;). Vous avez raison, cependant, je pense que je voulais dire download.oracle.com/javase/tutorial/ext/index.html . Aucune infraction BTW Je trouve habituellement vos réponses utiles, je suis juste surpris que celle-ci ait été acceptée.
orbfish
1
Le terme "javax" n'apparaît nulle part dans le lien suggéré plus haut dans ce fil de commentaire.
brochure du
La nouvelle API de date et d'heure se terminera en fait comme java.timeaprès tout.
Michael Piefel
234
Initialement, il javaxétait destiné aux extensions, et parfois les choses étaient promues hors de javaxJava.
Un problème était Netscape (et probablement IE) limitant les classes qui pourraient être dans le package java.
Lorsque Swing a été appelé à " passer son diplôme" à javapartir de javaxlà, il y a eu une sorte de mini-explosion parce que les gens ont réalisé qu'ils devraient modifier toutes leurs importations. Étant donné que la compatibilité descendante est l'un des principaux objectifs de Java, ils ont changé d'avis.
À ce moment-là, au moins pour la communauté (peut-être pas pour Sun), tout le point javaxétait perdu. Alors maintenant, nous avons certaines choses dans javax qui devraient probablement être dans java... mais à part les personnes qui ont choisi les noms de paquets, je ne sais pas si quelqu'un peut comprendre la raison d'être au cas par cas.
"Lorsque Swing a été mis au" java "de javax, il y a eu une sorte de mini-explosion parce que les gens ont réalisé qu'ils devraient ensuite modifier toutes leurs importations." Les gens se plaignaient de quelque chose qui pourrait être accompli avec une regex résultant de l'utilisation d'un code de qualité pré-production?
Traîneau
10
Ouaip. J'ai écrit un outil dans Visual Cafe pour convertir entre les deux (javax et java) avant que Sun ne décide de le conserver dans le package javax.
TofuBeer
51
javales packages sont de base et les javaxpackages sont des extensions.
Swing était une extension car AWT était l'API d'interface utilisateur d'origine. Swing est venu ensuite, dans la version 1.1.
Swing ne faisait pas partie de 1.1. Il y avait une version de Swing qui fonctionnait sur 1.1 en tant que bibliothèque.
Tom Hawtin - tackline
Il y a la clé - "bibliothèque", ne fait pas partie du JDK. La version est-elle incorrecte? Mes javadocs suggèrent que JButton existe depuis la version 1.3, donc peut-être que ma mémoire m'a fait défaut.
duffymo
1
Alors pourquoi la nouvelle API de date et d'heure dans javax .. la date et l'heure ne sont pas "de base"?
Pacerier
1
"... la nouvelle date et heure api (JSR-310) ..." - quelqu'un chez Oracle / Sun a décidé qu'il valait mieux la mettre en javax, car c'est une extension plus récente des bibliothèques de base. Si vous n'êtes pas d'accord, mieux vaut en parler avec eux.
L'espace de noms javax est généralement (c'est un mot chargé) utilisé pour les extensions standard, actuellement connues sous le nom de packages optionnels . Les extensions standard sont un sous-ensemble des API non essentielles; l'autre segment des API non principales s'appelle évidemment les extensions non standard, occupant les espaces de noms comme com.sun. * ou com.ibm. . Les API principales prennent en charge la java. espace de noms.
Tout dans le monde de l'API Java ne commence pas par le cœur, c'est pourquoi les extensions sont généralement nées de demandes JSR. Ils sont finalement promus à la base sur la base de «sages conseils».
L'intérêt pour cette nomenclature est né d'un faux pas de la part de Sun - les extensions auraient pu être promues au cœur, c'est-à-dire déplacées de javax. * Vers java. * Rompant la promesse de compatibilité descendante. Les programmeurs ont pleuré enroué et le meilleur sens a prévalu. C'est pourquoi, l'API Swing, bien que faisant partie du noyau, continue de rester dans l'espace de noms javax. *. Et c'est également ainsi que les packages sont promus des extensions au noyau - ils sont simplement disponibles pour téléchargement dans le cadre du JDK et du JRE.
Javax n'était utilisé que pour les extensions. Plus tard, le soleil l'a ajouté à la bibliothèque java en oubliant de supprimer le x. Les développeurs ont commencé à créer du code avec javax. Plus tard dans le temps, Suns a décidé de le changer en Java. Les développeurs n'ont pas aimé l'idée parce que leur code serait ruiné ... donc javax a été conservé.
Les packages java. * sont les principaux packages du langage Java, ce qui signifie que les programmeurs utilisant le langage Java devaient les utiliser afin de faire un usage utile du langage Java.
Les packages javax. * sont des packages facultatifs, qui fournissent un moyen standard et évolutif de rendre les API personnalisées disponibles pour toutes les applications exécutées sur la plate-forme Java.
Certains packages comme javax.swingn'étaient pas inclus dans la bibliothèque standard java au début. La société Sun a décidé de les considérer comme officiels et de les inclure dans les premières versions de java en tant que bibliothèques standard ou extensions standard.
Par convention, toutes les extensions standard commencent avec un Xcertain temps, elles peuvent être promues en première classe au fil du temps, comme ce qui s'est passé javax.swing.
java.time
maintenant download.java.net/jdk8/docs/api/java/time/package-summary.htmlJavaServlet
,Java3D
). La plupart des packages facultatifs sont enracinés dans l'javax.*
espace de noms, bien qu'il puisse y avoir des exceptions.Réponses:
Je pense que c'est une chose historique - si un package est introduit comme un ajout à un JRE existant, il se présente sous la forme
javax
. Si elle est introduite pour la première fois dans le cadre d'un JRE (comme NIO l'était, je crois), elle se présente sous la formejava
. Je ne sais pas pourquoi la nouvelle API de date et d'heure finira parjavax
suivre cette logique ... à moins qu'elle ne soit également disponible séparément en tant que bibliothèque pour fonctionner avec les versions antérieures (ce qui serait utile). Remarque de nombreuses années plus tard: après tout, il a finalement étéjava
utilisé.Je crois qu'il y a des restrictions sur le
java
paquet - je pense que les chargeurs de classe sont configurés pour autoriser uniquementjava.*
le chargement des classes à l'intérieurrt.jar
ou quelque chose de similaire. (Il y a certainement un enregistrementClassLoader.preDefineClass
.)EDIT: Bien qu'une explication officielle (la recherche orbfish suggérée n'en a pas donné une dans la première page) ne fait aucun doute sur "noyau" vs "extension", je soupçonne toujours que dans de nombreux cas, la décision pour un paquet particulier a un raison historique derrière cela aussi. Est-ce
java.beans
vraiment ce «noyau» de Java, par exemple?la source
java.time
après tout.Initialement, il
javax
était destiné aux extensions, et parfois les choses étaient promues hors dejavax
Java.Un problème était Netscape (et probablement IE) limitant les classes qui pourraient être dans le package java.
Lorsque Swing a été appelé à " passer son diplôme" à
java
partir dejavax
là, il y a eu une sorte de mini-explosion parce que les gens ont réalisé qu'ils devraient modifier toutes leurs importations. Étant donné que la compatibilité descendante est l'un des principaux objectifs de Java, ils ont changé d'avis.À ce moment-là, au moins pour la communauté (peut-être pas pour Sun), tout le point
javax
était perdu. Alors maintenant, nous avons certaines choses dans javax qui devraient probablement être dansjava
... mais à part les personnes qui ont choisi les noms de paquets, je ne sais pas si quelqu'un peut comprendre la raison d'être au cas par cas.la source
java
les packages sont de base et lesjavax
packages sont des extensions.Swing était une extension car AWT était l'API d'interface utilisateur d'origine. Swing est venu ensuite, dans la version 1.1.
la source
java.time
: docs.oracle.com/javase/8/docs/api/java/time/…L'espace de noms javax est généralement (c'est un mot chargé) utilisé pour les extensions standard, actuellement connues sous le nom de packages optionnels . Les extensions standard sont un sous-ensemble des API non essentielles; l'autre segment des API non principales s'appelle évidemment les extensions non standard, occupant les espaces de noms comme com.sun. * ou com.ibm. . Les API principales prennent en charge la java. espace de noms.
Tout dans le monde de l'API Java ne commence pas par le cœur, c'est pourquoi les extensions sont généralement nées de demandes JSR. Ils sont finalement promus à la base sur la base de «sages conseils».
L'intérêt pour cette nomenclature est né d'un faux pas de la part de Sun - les extensions auraient pu être promues au cœur, c'est-à-dire déplacées de javax. * Vers java. * Rompant la promesse de compatibilité descendante. Les programmeurs ont pleuré enroué et le meilleur sens a prévalu. C'est pourquoi, l'API Swing, bien que faisant partie du noyau, continue de rester dans l'espace de noms javax. *. Et c'est également ainsi que les packages sont promus des extensions au noyau - ils sont simplement disponibles pour téléchargement dans le cadre du JDK et du JRE.
la source
Javax n'était utilisé que pour les extensions. Plus tard, le soleil l'a ajouté à la bibliothèque java en oubliant de supprimer le x. Les développeurs ont commencé à créer du code avec javax. Plus tard dans le temps, Suns a décidé de le changer en Java. Les développeurs n'ont pas aimé l'idée parce que leur code serait ruiné ... donc javax a été conservé.
la source
Les packages java. * sont les principaux packages du langage Java, ce qui signifie que les programmeurs utilisant le langage Java devaient les utiliser afin de faire un usage utile du langage Java.
Les packages javax. * sont des packages facultatifs, qui fournissent un moyen standard et évolutif de rendre les API personnalisées disponibles pour toutes les applications exécutées sur la plate-forme Java.
la source
Certains packages comme
javax.swing
n'étaient pas inclus dans la bibliothèque standard java au début. La société Sun a décidé de les considérer comme officiels et de les inclure dans les premières versions de java en tant que bibliothèques standard ou extensions standard.Par convention, toutes les extensions standard commencent avec un
X
certain temps, elles peuvent être promues en première classe au fil du temps, comme ce qui s'est passéjavax.swing
.la source