回答:
これは歴史的なことだと思いますjavax
。既存のJREへの追加としてパッケージが導入された場合は、として提供されます。それがJREの一部として最初に導入された場合(NIOがそうであったように)、それはとして提供されjava
ます。新しい日付と時刻のAPIがなぜjavax
このロジックに従うのかわからない...それが以前のバージョンで動作するライブラリとして個別に利用できるようにならない限り(これは便利でしょう)。何年も後のことに注意してくださいjava
。結局のところ、それは実際には結局終わったのです。
私はjava
パッケージに制限があると思います-クラスローダーは、内部のクラスまたは同様のもののロードのみを許可するように設定されていると思います。(チェックインは確かにあります。)java.*
rt.jar
ClassLoader.preDefineClass
編集:公式の説明(最初のページなどでorbfishが提案したものでは得られなかった)は「コア」対「拡張」について疑いの余地はありませんが、多くの場合、特定のパッケージの決定にはその背後にも歴史的な理由があります。java.beans
たとえば、それは本当にJavaの「コア」なのでしょうか。
java.time
結局のところ、新しい日付と時刻のAPIは実際には最終的には終了します。
もともとjavax
は拡張機能を対象としたものでしたが、時にはjavax
Javaに昇格することもありました。
1つの問題は、Javaパッケージに含まれる可能性があるクラスを制限するNetscape(およびおそらくIE)でした。
Swingが「卒業」するように設定されたときjava
、javax
そこからある種の小さな爆発がありました。人々は自分たちの輸入品のすべてを修正しなければならないことに気づいたからです。後方互換性がJavaの主要な目標の1つであることを考えると、彼らは考え方を変えました。
その時点で、少なくともコミュニティ(おそらくSunではない)にとっては、すべてのポイントjavax
が失われました。だから、おそらくjavaxにはいくつかのものが含まれるはずjava
ですが、パッケージ名を選択した人は別として、その根拠がケースバイケースで誰かが理解できるかどうかはわかりません。
java
パッケージは基本ですであり、javax
パッケージは拡張です。
AWTが元のUI APIだったため、Swingは拡張機能でした。Swingはその後、バージョン1.1で登場しました。
java.time
:docs.oracle.com/javase/8/docs/api/java/time/...
javax名前空間は通常(ロードされた単語)、標準の拡張機能に使用されます。現在、オプションパッケージと呼ばれています。標準拡張機能は、非コアAPIのサブセットです。非コアAPIの他のセグメントは明らかに非標準拡張と呼ばれ、com.sun。*やcom.ibmなどの名前空間を占有します。。コアAPIはJavaを使用します。名前空間。
Java APIの世界のすべてがコアで始まるわけではないため、通常、拡張機能はJSRリクエストから生まれます。彼らは最終的に「賢い助言者」に基づいてコアに昇格します。
この命名法への関心は、Sunの一部から生まれました-拡張機能がコアに昇格された可能性があります。つまり、javax。*からjava。*に移動され、下位互換性の約束が破られました。プログラマーはしわがれ声を上げ、より良い感覚が広まった。このため、Swing APIはコアの一部ですが、javax。*名前空間に残ります。そして、それはパッケージが拡張機能からコアに昇格する方法でもあります-それらは単にJDKとJREの一部としてダウンロードできるようになります。
java。*パッケージはコアJava言語パッケージです。つまり、Java言語を使用するプログラマーは、Java言語を有効に使用するためにそれらを使用する必要がありました。
javax。*パッケージはオプションのパッケージであり、Javaプラットフォームで実行されているすべてのアプリケーションでカスタムAPIを使用できるようにする標準のスケーラブルな方法を提供します。
java.time
今すぐdownload.java.net/jdk8/docs/api/java/time/package-summary.html