Пакет javax vs java

Какое обоснование пакета javax? Что входит в java и что в javax?

Я знаю, что многие пакеты enterprise-y находятся в javax, но также Swing, новая дата и время api (JSR-310) и другие пакеты J2SE.

Ответ 1

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

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

EDIT: хотя официальное объяснение (предложенный поиск orbfish не дал ни одного на первой странице или около того), не вызывает сомнений в отношении "основного" и "расширения", я все еще подозреваю, что во многих случаях решение для любого конкретного пакет также имеет историческую причину. Действительно ли java.beans это "ядро" для Java, например?

Ответ 2

Первоначально javax предназначался для расширений, и иногда вещи можно было бы продвигать из javax в java.

Одной из проблем был Netscape (и, возможно, IE), ограничивающий классы, которые могут быть в пакете java.

Когда Swing был настроен на "выпускник" на java из javax, был вид мини-взрыва, потому что люди поняли, что им придется модифицировать весь свой импорт. Учитывая, что обратная совместимость является одной из основных целей Java, они изменили свое мнение.

В этот момент времени, по крайней мере для сообщества (возможно, не для Солнца), весь смысл джавакса был потерян. Итак, теперь у нас есть некоторые вещи в javax, которые, вероятно, должны быть в java... но помимо людей, которые выбрали имена пакетов, я не знаю, сможет ли кто-нибудь понять, что такое обоснование в каждом конкретном случае.

Ответ 3

java-пакеты являются "базовыми", а пакеты javax - это расширения.

Swing был расширением, поскольку AWT был оригинальным интерфейсом API. Свинг появился позже, в версии 1.1.

Ответ 4

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

Не все в мире API Java начинается с ядра, поэтому расширения обычно возникают из запросов JSR. В конечном счете, они основаны на "мудрого совета".

Интерес к этой номенклатуре, появившийся из-под faux pas на Sun part - расширения могли быть продвинуты до ядра, то есть перешли от javax. * к java. * нарушив обещание обратной совместимости. Программисты кричали хрипло, и преобладал смысл. Вот почему API Swing, хотя и является частью ядра, продолжает оставаться в пространстве имен javax. *. И это также то, как пакеты получают повышение от расширений до ядра - они просто доступны для загрузки как часть JDK и JRE.

Ответ 5

Javax использовался только для расширений. Но позже солнце добавило его в java libary, забыв удалить x. Разработчики начали создавать код с помощью javax. Но позже солнце вовремя решило изменить его на java. Разработчикам не понравилась идея, потому что они были бы испорчены... поэтому javax был сохранен.

Ответ 6

Пакеты

java. * - это базовые пакеты языковых пакетов Java, что означает, что программисты, использующие язык Java, должны были использовать их для того, чтобы сделать целесообразным использование Java-языка.

Пакеты

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