2009-04-07 12 views
283

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

私はエンタープライズ向けパッケージの多くがjavaxであることは知っていますが、Swing、新しい日付と時刻のapi(JSR-310)などのJ2SEパッケージもそうです。

+3

「java.time」のJSR 310 http://download.java.net/jdk8/docs/api/java/time/package-summary.html –

+0

オプションのパッケージは、オープンな標準APIの実装です(オプションパッケージ 'JavaServlet'、' Java3D'の例)。ほとんどのオプションパッケージは 'javax。*'名前空間に根ざしていますが、例外があるかもしれません。 – Lucky

答えて

159

私はそれが歴史的なものだと思います。パッケージが既存のJREに追加された場合は、javaxとなります。最初にNREのようにというJREが導入された場合は、javaとなります。なぜ新しい日付と時刻のAPIが、このロジックに続いてjavaxとなるのでしょうか...それは、以前のバージョンで動作するライブラリとして別々に利用できる場合を除き(これは便利かもしれません)。 数年後のメモ:結局のところ、javaになってしまいました。

私はjavaパッケージ上の制限があると信じて - 私はクラスローダがに設定されているだけjava.*内のクラスがrt.jarまたは類似のものからロードすることが可能だと思います。 (確かにClassLoader.preDefineClassのチェックがあります)

EDIT:正式な説明(最初のページなどでは、orbfishの検索では1つも出ませんでした)は間違いなく "コア"と "拡張子"多くの場合、特定のパッケージの決定には歴史的な理由があると考えられます。 java.beansは本当にJavaの "コア"ですか?

+6

私はiPadを使ってカットアンドペーストするよりも、alt-tを押して入力する方が簡単ですから? ;)。あなたは正しいと思いますが、私は*私がhttp://download.oracle.com/javase/tutorial/ext/index.htmlを意味すると思っています。あなたの答えが有用であることがわかっています。私はちょうどこれが受け入れられたことに驚いています。 – orbfish

+1

"javax"という用語は、このコメントスレッドの前半で提案されたリンクのどこにも表示されません。 – pamphlet

+0

新しい日付と時刻のAPIは実際には 'java.time'として最終的に終了します。 –

41

Javaパッケージは「ベース」であり、javaxパッケージは拡張機能です。

AWTが元のUI APIであったため、スイングは拡張です。その後、バージョン1.1でスイングが発生しました。

+0

スイングは1.1の一部ではありませんでした。ライブラリとして1.1で動作したSwingのバージョンがありました。 –

+0

キー「ライブラリ」はJDKの一部ではありません。バージョンが間違っていますか?私のjavadocsは、JButtonは1.3以降になっていることを示唆しています。 – duffymo

+1

なぜ、新しい日付と時刻のAPIがjavax .. dateとtimeに "base"でないのですか? – Pacerier

31

javax名前空間は、標準拡張に現在使用されている(通常は)の(ロードされた単語)です。標準拡張は、非コアAPIのサブセットです。非コアAPIの他のセグメントは、非標準拡張と明示的に呼ばれ、com.sun。*やcom.ibmのような名前空間を占めています。 。コアAPIはJavaを使用します。名前空間。

Java API世界のすべてがコアで始まっているわけではありません。そのため、拡張機能は通常JSR要求から生まれています。彼らは最終的に「賢明な助言」に基づいてコアに昇進します。

この用語に興味があるのは、Sunの部分にある偽のファイルから出てきたものです。つまり、拡張機能をコアにすることができます。つまり、javax。*からjava。*に移動して下位互換性の約束を破ることができます。プログラマーは喉が泣き、より良いセンスが勝った。このため、Swing APIはコアの一部ですが、引き続きjavax。*名前空間にとどまっています。また、パッケージが拡張からコアにどのように昇格されるかは、JDKとJREの一部としてダウンロードするだけです。

+1

よく入れて、ミスター。これはここで受け入れられたはずです。 –

180

元はjavaxは拡張のためのもので、時にはjavaxからjavaに昇格することもありました。

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

スウィングがjavaxからjavaに「graduate」に設定されたとき、人々はすべてのインポートを変更する必要があることに気づいたので、ミニブタの一種がありました。下位互換性がJavaの主要な目標の1つであることを考えると、彼らは心を変えました。

その時点では、少なくともコミュニティにとっては(おそらくSunにとってではないかもしれないが)、javaxの全部が失われました。だから、おそらくjavaにあるはずのjavaxにはいくつかのものがあります...しかし、パッケージ名を選んだ人以外は、ケースバイケースで根拠が何であるか誰でも知ることができません。

+8

"Swingがjavaxからjavaに" graduate "に設定されたとき、人々はすべてのインポートを変更しなければならないことに気付いたので、ミニブタの一種がありました。人々は、プレゼンテーション品質のコードを使用した結果である正規表現で達成できるものについて不平を言っていましたか? – ArtB

+8

私はSunがJavaパッケージをjavaxパッケージに保持することに決めた前に、2つの間(javaxとjava)に変換するツールをVisual Cafeに書きました。 – TofuBeer

+10

これはansだったはずです – Pacerier

0

java。*パッケージはコアJava言語パッケージです。つまり、Java言語を使用するプログラマーは、Java言語の価値ある使い方をするためにJava言語を使用しなければなりませんでした。

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

1

Javaxは、拡張機能でのみ使用されていました。しかし、その後、Sunはxを削除することを忘れているjava libaryにそれを加えました。開発者は、javaxを使用してコードを作成し始めました。しかし、後で太陽がJavaにそれを変更することを決めた。開発者はコードが壊れてしまったのでアイデアが気に入らなかったので、javaxが保持されました。