javaxとjavaパッケージ


385

javaxパッケージの背後にある根拠は何ですか?javaとjavaxには何が入りますか?

多くのenterprise-yパッケージがjavaxに含まれていることは知っていますが、Swing、新しい日時API(JSR-310)、およびその他のJ2SEパッケージもそうです。



オプションパッケージは、オープンな標準APIの実装です(オプションパッケージの例JavaServletJava3D)。javax.*例外はあるかもしれませんが、ほとんどのオプションパッケージは名前空間をルートとしています。
ラッキー

回答:


212

これは歴史的なことだと思いますjavax。既存のJREへの追加としてパッケージが導入された場合は、として提供されます。それがJREの一部として最初に導入された場合(NIOがそうであったように)、それはとして提供されjavaます。新しい日付と時刻のAPIがなぜjavaxこのロジックに従うのかわからない...それが以前のバージョンで動作するライブラリとして個別に利用できるようにならない限り(これは便利でしょう)。何年も後のことに注意してくださいjava。結局のところ、それは実際には結局終わったのです。

私はjavaパッケージに制限があると思います-クラスローダーは、内部のクラスまたは同様のもののロードのみを許可するように設定されていると思います。(チェックインは確かにあります。)java.*rt.jarClassLoader.preDefineClass

編集:公式の説明(最初のページなどでorbfishが提案したものでは得られなかった)は「コア」対「拡張」について疑いの余地はありませんが、多くの場合、特定のパッケージの決定にはその背後にも歴史的な理由があります。java.beansたとえば、それは本当にJavaの「コア」なのでしょうか。


7
iPadを使用してカットアンドペーストするよりも、Alt-Tを押して入力する方が簡単だからです。;)。しかし、私はdownload.oracle.com/javase/tutorial/ext/index.htmlを意味していると思います。申し訳ありませんが、あなたの回答は役に立ったと思います。これが受け入れられたのは驚きです。
orbfish

1
「javax」という用語は、このコメントスレッドで以前に提案されたリンクのどこにも表示されません。
パンフレット

java.time結局のところ、新しい日付と時刻のAPIは実際には最終的には終了します。
Michael Piefel 16

234

もともとjavaxは拡張機能を対象としたものでしたが、時にはjavaxJavaに昇格することもありました。

1つの問題は、Javaパッケージに含まれる可能性があるクラスを制限するNetscape(およびおそらくIE)でした。

Swingが「卒業」するように設定されたときjavajavaxそこからある種の小さな爆発がありました。人々は自分たちの輸入品のすべてを修正しなければならないことに気づいたからです。後方互換性がJavaの主要な目標の1つであることを考えると、彼らは考え方を変えました。

その時点で、少なくともコミュニティ(おそらくSunではない)にとっては、すべてのポイントjavaxが失われました。だから、おそらくjavaxにはいくつかのものが含まれるはずjavaですが、パッケージ名を選択した人は別として、その根拠がケースバイケースで誰かが理解できるかどうかはわかりません。


12
「Swingがjavaxからjavaに「卒業」するように設定されたとき、インポートのすべてを変更する必要があることに人々が気づいたため、一種の小さな爆発がありました。」人々は、製品化前の品質コードを使用した結果である正規表現で達成できることについて不平を言っていましたか?
そり

10
うん。Sunがjavaxパッケージに保持することを決定する前に、2つ(javaxとjava)の間で変換するツールをVisual Cafeで作成しました。
TofuBeer

51

javaパッケージは基本ですであり、javaxパッケージは拡張です。

AWTが元のUI APIだったため、Swingは拡張機能でした。Swingはその後、バージョン1.1で登場しました。


Swingは1.1の一部ではありませんでした。ライブラリとして1.1で動作するバージョンのSwingがありました。
トム・ホーティン-

重要なのは、JDKの一部ではなく「ライブラリ」です。バージョンが間違っていますか?私のjavadocは、JButtonが1.3以降であることを示唆しているので、おそらく私の記憶は失敗しました。
duffymo 2009

1
では、なぜjavax ..の新しい日付と時刻のAPIは「ベース」ではないのですか?
ペーチェリエ

1
「...新しい日付と時刻のapi(JSR-310)...」-Oracle / Sunの誰かが、コアライブラリの新しい拡張機能であるため、javaxに入れるほうがよいと判断しました。同意しない場合は、一緒に取り上げることをお勧めします。
duffymo '18 / 10/18

ただ、参考のために:彼らはその決定を元に戻すと、JSR-310は、下に置かれましたjava.timedocs.oracle.com/javase/8/docs/api/java/time/...
マーク・Rotteveel

37

javax名前空間は通常(ロードされた単語)、標準の拡張機能に使用されます。現在、オプションパッケージと呼ばれています。標準拡張機能は、非コアAPIのサブセットです。非コアAPIの他のセグメントは明らかに非標準拡張と呼ばれ、com.sun。*やcom.ibmなどの名前空間を占有します。。コアAPIはJavaを使用します。名前空間。

Java APIの世界のすべてがコアで始まるわけではないため、通常、拡張機能はJSRリクエストから生まれます。彼らは最終的に「賢い助言者」に基づいてコアに昇格します。

この命名法への関心は、Sunの一部から生まれました-拡張機能がコアに昇格された可能性があります。つまり、javax。*からjava。*に移動され、下位互換性の約束が破られました。プログラマーはしわがれ声を上げ、より良い感覚が広まった。このため、Swing APIはコアの一部ですが、javax。*名前空間に残ります。そして、それはパッケージが拡張機能からコアに昇格する方法でもあります-それらは単にJDKとJREの一部としてダウンロードできるようになります。


2

Javaxは、拡張機能専用でした。それでも後日、xを削除するのを忘れてjavaライブラリに追加しました。開発者はjavaxでコードの作成を開始しました。しかし、その後、SunはそれをJavaに変更することを決定しました。コードは台無しになるので、開発者はこのアイデアを気に入らなかったので、javaxは維持されました。


1

java。*パッケージはコアJava言語パッケージです。つまり、Java言語を使用するプログラマーは、Java言語を有効に使用するためにそれらを使用する必要がありました。

javax。*パッケージはオプションのパッケージであり、Javaプラットフォームで実行されているすべてのアプリケーションでカスタムAPIを使用できるようにする標準のスケーラブルな方法を提供します。


0

のようないくつかのパッケージ javax.swingは、最初はJava標準ライブラリに含まれていませんでした。Sunの会社はそれらを公式と見なすことを決定し、それらを標準ライブラリまたは標準拡張機能としてjavaの初期バージョンに含めました。

慣例により、すべての標準拡張機能は、でX何が起こったかのように、時間の経過とともにファーストクラスに昇格することができる一方、しばらくの間で始まりjavax.swingます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.