javax vs java пакет


385

Яке обґрунтування лежить у пакеті javax? Що переходить у java, а що в javax?

Я знаю, що багато пакетів підприємств-y є в javax, але так само є Swing, нова api дата та час (JSR-310) та інші пакети J2SE.



А Опциональний пакет являє собою реалізацію відкритого, стандартного API (приклади додаткових пакетів JavaServlet, Java3D). Більшість необов'язкових пакетів укорінені у javax.*просторі імен, хоча можуть бути винятки.
Пощастило

Відповіді:


212

Я думаю, що це історична річ - якщо пакет вводиться як доповнення до існуючого JRE, він надходить як javax. Якщо вона вперше представлена ​​як частина JRE (як я вважаю, NIO), то вона входить як java. Не впевнений, чому новий API дати і часу в кінцевому підсумку javaxбуде керуватися цією логікою ... якщо тільки він також не буде доступний окремо як бібліотека для роботи з більш ранніми версіями (що було б корисно). Зауважте, через багато років: він фактично закінчився java.

Я вважаю , що існують обмеження на javaупаковці - Я думаю , що загрузчиков класів налаштовані на тільки дозволяють класи всередині java.*бути завантажені з rt.jarабо що - щось подібне. (Там звичайно є реєстрація ClassLoader.preDefineClass.)

EDIT: Хоча офіційне пояснення (запропонована пошукова куля не дало жодної сторінки на першій сторінці чи так) не викликає сумнівів щодо "core" та "extension", я все ж підозрюю, що у багатьох випадках рішення для будь-якого конкретного пакету має історична причина також. Чи java.beansсправді це «ядро» для Java, наприклад?


7
Тому що читачеві Aa легше натиснути клавішу alt-t і ввести її, ніж мені вирізати та вставити за допомогою iPad? ;). Ти прав, але думаю, я мав на увазі download.oracle.com/javase/tutorial/ext/index.html . Без правопорушень. До речі, я вважаю ваші відповіді корисними. Я просто здивований, що цю інформацію прийняли.
orbfish

1
Термін "javax" ніде не відображається в посиланні, запропонованому раніше в цьому потоці коментарів.
памфлет

Новий API дати та часу фактично закінчився як і java.timeзрештою.
Майкл Піефель

234

Спочатку він javaxбув призначений для розширення, а іноді речі висуваються з javaxяви.

Однією з проблем було Netscape (і, можливо, IE), які обмежують класи, які можуть бути в пакеті Java.

Коли свінг був встановлений в положення «випускник» , щоб javaвід javaxбув свого роду міні-удар, тому що люди зрозуміли , що вони повинні змінити все їх імпорту. Зважаючи на те, що зворотна сумісність є однією з головних цілей Java, вони передумали.

У той момент часу, принаймні, для громади (можливо, не для Сонця) вся точка javaxзгубилася. Таким чином, зараз у нас є деякі речі в javax, які, мабуть, повинні бути в java... але окрім людей, які обрали назви пакетів, я не знаю, чи хтось може зрозуміти, що це за обґрунтування в кожному конкретному випадку.


12
"Коли Swing був налаштований на" випускник "в java з javax, був такий собі міні-вибух, тому що люди зрозуміли, що їм доведеться потім змінити весь свій імпорт". Люди скаржилися на щось, що може бути виконане за допомогою регулярного виразка, який був результатом їх, використовуючи код якості препродуцитону?
Санки

10
Так. Я написав інструмент у Visual Cafe для перетворення між ними (javax та java), перш ніж Sun вирішила просто тримати його в пакеті javax.
TofuBeer

51

javaпакети є базовими , а javaxпакети - розширеннями.

Swing був розширенням, оскільки AWT був оригінальним API інтерфейсу. Swing з'явився згодом, у версії 1.1.


Гойдалка не входила до складу 1.1. Існувала версія Swing, яка працювала на 1.1 як бібліотека.
Том Хотін - тайклін

Там ключ - "бібліотека", а не частина JDK. У мене версія неправильна? Мої javadocs припускають, що JButton був з 1.3 року, тому, можливо, моя пам'ять мене зірвала.
duffymo

1
Тож чому API нового дати та часу в javax .. дата та час не є "базовими"?
Pacerier

1
"... нова дата та час api (JSR-310) ..." - хтось із Oracle / Sun вирішив, що краще ввести javax, оскільки це нове розширення основних бібліотек. Якщо ви не погоджуєтеся, краще взяти це з собою.
duffymo

Для довідки: вони відмінили це рішення, і JSR-310 був поміщений під java.time: docs.oracle.com/javase/8/docs/api/java/time/…
Mark Rotteveel

37

Простір імен javax зазвичай (це завантажене слово) використовується для стандартних розширень, в даний час відомих як додаткові пакети . Стандартні розширення - це підмножина непрофільних API; інший сегмент непрофільних API очевидно називається нестандартними розширеннями, займаючи простори імен, як com.sun. * або com.ibm. . Основні API займають Java. простір імен.

Не все в світі Java API починається в основі, тому розширення зазвичай народжуються з запитів JSR. Врешті-решт вони перетворюються на основу "мудрої ради".

Інтерес до цієї номенклатури виникла з фальшивого паспорту з боку Sun - розширення можна було б перенести до ядра, тобто перейти з javax. * В java. *, Порушивши обіцянку відсталої сумісності. Програмісти кричали хрипко, і краще почуття панувало. Ось чому, API Swing, хоча і є частиною ядра, продовжує залишатися у просторі імен javax. *. І ось так просуваються пакунки від розширень до основних - вони просто стають доступними для завантаження як частина JDK та JRE.


2

Javax використовувався лише для розширень. Однак пізніше сонце додало його до java libary, забувши видалити х. Розробники почали робити код з javax. Однак згодом сонце вирішило змінити його на java. Розробникам не сподобалася ідея, оскільки їх код буде зіпсований ... тому javax зберігався.


1

java. * пакети - це основні мовні пакети Java, тобто програмісти, які використовують мову Java, повинні були використовувати їх для того, щоб якомога більше використовувати мову Java.

пакети javax. * - це додаткові пакети, що забезпечує стандартний масштабований спосіб зробити користувальницькі API доступними для всіх програм, що працюють на платформі Java.


0

Деякі такі пакети, як javax.swingспочатку, не були включені до стандартної бібліотеки Java. Компанія Sun вирішила вважати їх офіційними і включила їх у ранні версії java як стандартні бібліотеки або стандартні розширення.

Згідно з умовами, всі стандартні розширення починаються з певного Xчасу, і їх можна з часом підвищити до першого класу, як це сталося javax.swing.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.