paket javax vs java


385

Apa alasan di balik paket javax? Apa yang masuk ke java dan apa ke javax?

Saya tahu banyak paket enterprise-y berada dalam javax, tetapi begitu juga Swing, api tanggal dan waktu yang baru (JSR-310) dan paket J2SE lainnya.



Paket opsional adalah implementasi dari API standar terbuka (contoh paket opsional JavaServlet, Java3D). Sebagian besar paket opsional di-root di javax.*namespace, meskipun mungkin ada pengecualian.
Lucky

Jawaban:


212

Saya pikir ini adalah hal yang historis - jika suatu paket diperkenalkan sebagai tambahan pada JRE yang ada, maka paket itu masuk sebagai paket javax. Jika pertama kali diperkenalkan sebagai bagian dari JRE (seperti NIO, saya percaya) maka akan muncul sebagai java. Tidak yakin mengapa tanggal dan waktu baru API akan berakhir dengan javaxmengikuti logika ini ... kecuali kalau itu juga akan tersedia secara terpisah sebagai pustaka untuk bekerja dengan versi sebelumnya (yang akan berguna). Catatan dari bertahun-tahun kemudian: itu benar-benar berakhir javasetelah

Saya percaya ada batasan pada javapaket - saya pikir classloaders diatur untuk hanya mengizinkan kelas-kelas di dalam java.*diambil dari rt.jaratau sesuatu yang serupa. (Pasti ada check-in ClassLoader.preDefineClass.)

EDIT: Sementara penjelasan resmi (pencarian orbfish yang disarankan tidak menghasilkan satu di halaman pertama atau lebih) tidak ada keraguan tentang "inti" vs "ekstensi", saya masih curiga bahwa dalam banyak kasus keputusan untuk paket tertentu memiliki alasan historis di balik itu juga. Benarkah java.beans"inti" itu ke Jawa, misalnya?


7
Karena lebih mudah bagi pembaca untuk menekan alt-t dan mengetiknya daripada bagi saya untuk memotong dan menempel menggunakan iPad? ;). Anda benar, saya pikir saya maksud unduh.oracle.com/javase/tutorial/ext/index.html . Jangan tersinggung BTW Saya biasanya menemukan jawaban Anda berguna. Saya hanya terkejut bahwa jawaban ini diterima.
orbfish

1
Istilah "javax" tidak muncul di mana pun di tautan yang disarankan sebelumnya di utas komentar ini.
pamflet

API tanggal dan waktu yang baru akan benar-benar berakhir sama java.timesekali.
Michael Piefel

234

Awalnya javaxdimaksudkan untuk ekstensi, dan kadang-kadang hal dipromosikan keluar javaxke java.

Satu masalah adalah Netscape (dan mungkin IE) yang membatasi kelas-kelas yang mungkin ada dalam paket java.

Ketika Swing diatur untuk "lulus" javadari javaxsana ada semacam ledakan kecil karena orang-orang menyadari bahwa mereka harus memodifikasi semua impor mereka. Mengingat kompatibilitas ke belakang adalah salah satu tujuan utama Jawa, mereka berubah pikiran.

Pada titik waktu itu, setidaknya untuk komunitas (mungkin bukan untuk Sun) seluruh titik javaxhilang. Jadi sekarang kita memiliki beberapa hal dalam javax yang mungkin harus di java... tetapi selain dari orang-orang yang memilih nama paket saya tidak tahu apakah ada yang bisa mencari tahu apa alasannya berdasarkan kasus per kasus.


12
"Ketika Swing ditetapkan untuk" lulus "ke java dari javax ada semacam ledakan kecil karena orang-orang menyadari bahwa mereka harus memodifikasi semua impor mereka." Orang-orang mengeluh tentang sesuatu yang bisa diselesaikan dengan regex yang merupakan hasil dari mereka menggunakan kode kualitas preproduciton?
Kereta luncur

10
Ya. Saya menulis sebuah alat di Visual Cafe untuk mengkonversi antara keduanya (javax dan java) sebelum Sun memutuskan untuk menyimpannya dalam paket javax.
TofuBeer

51

javapaket adalah basis , dan javaxpaket adalah ekstensi.

Swing adalah ekstensi karena AWT adalah API UI asli. Ayunan datang sesudahnya, dalam versi 1.1.


Ayunan bukan bagian dari 1.1. Ada versi Swing yang berjalan di 1.1 sebagai perpustakaan.
Tom Hawtin - tackline

Ada kuncinya - "perpustakaan", bukan bagian dari JDK. Apakah versi saya salah? Javascript saya menyarankan bahwa JButton sudah sejak 1.3, jadi mungkin ingatan saya gagal.
duffymo

1
Jadi mengapa API tanggal dan waktu baru di javax .. tanggal dan waktu bukan "basis"?
Pacerier

1
"... api tanggal dan waktu yang baru (JSR-310) ..." - seseorang di Oracle / Sun memutuskan bahwa itu lebih baik dimasukkan ke dalam javax, karena itu adalah perpanjangan yang lebih baru dari perpustakaan inti. Jika Anda tidak setuju, lebih baik bawa saja.
duffymo

Hanya untuk referensi: mereka mengembalikan keputusan itu, dan JSR-310 diletakkan di bawah java.time: docs.oracle.com/javase/8/docs/api/java/time/…
Mark Rotteveel

37

Namespace javax biasanya (itu kata yang dimuat) digunakan untuk ekstensi standar, saat ini dikenal sebagai paket opsional . Ekstensi standar adalah subset dari API non-inti; segmen lain dari API non-inti jelas disebut ekstensi non-standar, menempati ruang nama seperti com.sun. * atau com.ibm. . API inti menggunakan java. namespace.

Tidak semua yang ada di dunia Java API dimulai pada intinya, itulah sebabnya ekstensi biasanya lahir dari permintaan JSR. Mereka akhirnya dipromosikan ke inti berdasarkan 'nasihat bijak'.

Ketertarikan pada nomenklatur ini, muncul dari kecerobohan pihak Sun - ekstensi dapat dipromosikan ke inti, yaitu dipindahkan dari javax. * Ke java. * Melanggar janji kompatibilitas mundur. Programmer menangis serak, dan rasa yang lebih baik menang. Inilah sebabnya, Swing API meskipun merupakan bagian dari inti, terus tetap berada di javax. * Namespace. Dan itu juga bagaimana paket dipromosikan dari ekstensi ke inti - mereka hanya tersedia untuk diunduh sebagai bagian dari JDK dan JRE.


2

Javax dulunya hanya untuk ekstensi. Namun kemudian sun menambahkannya ke perpustakaan java lupa untuk menghapus x. Pengembang mulai membuat kode dengan javax. Namun kemudian matahari memutuskan untuk mengubahnya ke java. Pengembang tidak menyukai ide itu karena kode mereka akan hancur ... jadi javax disimpan.


1

paket java. * adalah paket inti bahasa Jawa, yang berarti bahwa pemrogram yang menggunakan bahasa Java harus menggunakannya untuk memanfaatkan setiap penggunaan bahasa java.

paket javax. * adalah paket opsional, yang menyediakan cara standar dan dapat diskalakan untuk membuat API khusus tersedia untuk semua aplikasi yang berjalan pada platform Java.


0

Beberapa paket seperti javax.swingtidak dimasukkan dalam perpustakaan standar java pada awalnya. Perusahaan Sun memutuskan untuk menganggapnya resmi dan memasukkannya ke dalam versi awal java sebagai pustaka standar atau ekstensi standar.

Berdasarkan konvensi, semua ekstensi standar dimulai dengan beberapa Xsaat mereka dapat dipromosikan ke kelas satu seiring waktu seperti apa yang terjadi javax.swing.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.