Подтвердить что ты не робот

Плохая практика использования собственных Java-классов Sun?

Предупреждение о компиляторе отображает предупреждения, если вы используете собственные Java-классы Sun. Я придерживаюсь мнения, что использовать эти классы обычно неплохо. Я читал это где-то. Однако, помимо предупреждений, есть ли какие-либо фундаментальные причины, почему вы не должны их использовать?

4b9b3361

Ответ 1

Поскольку они являются внутренними API-интерфейсами: они могут быть изменены в недокументированном или неподдерживаемом способе, и они привязаны к определенному JRE/JDK ( Sun в вашем случае), что ограничивает переносимость ваших программ.

Попытайтесь избежать использования таких API, всегда предпочитайте общедоступный документированный и заданный класс.

Ответ 2

Документация JDK 6 содержит ссылку под названием Примечание о sun.* Пакеты. Это документ из документов Java 1.2, поэтому ссылки на sun.* должны обрабатываться так, как если бы они сказали com.sun.*

Наиболее важными из них являются:

Классы, которые Sun включает в себя Java 2 SDK, стандартная версия, осень в группы пакетов java.*, javax.*, org.* и sun.*. Все, кроме sun.*пакеты являются стандартной частью Платформу Java и будет поддерживаться в будущее. В общем, пакеты таких как sun.*, которые находятся за пределами Платформа Java, могут быть разными ОС (Solaris, Windows, Linux, Macintosh и т.д.) И может меняться при любом время без уведомления с версиями SDK (1.2, 1.2.1, 1.2.3 и т.д.). программы которые содержат прямые вызовы sun.*пакеты не являются 100% чистой Java.

и

Каждая компания, которая реализует Java платформа сделает это в своих частный путь. Классы в sun.* являются присутствовать в SDK для поддержки Солнца реализация платформы Java: классы sun.* - это то, что делает Классы платформы Java работают "под охватывает" для Sun Java 2 SDK. классы вообще не будут присутствовать на другой платформе Java-разработчика. Если ваша Java-программа запрашивает класс "sun.package.Foo" по имени, он может не работать с ClassNotFoundError, и вы будете потеряли главное преимущество развивается на Java.

Ответ 3

Попробуйте запустить код с помощью JVM, отличного от Sun, и посмотрите, что произойдет...

(Ваш код завершится с исключением класса ClassNotFound)

Ответ 4

Да, потому что никто не гарантирует, что эти классы или API будут одинаковыми со следующей версией Java, и я уверен, что это не гарантирует, что эти классы доступны в версиях Java от других поставщиков.

Итак, вы привязываете свой код к специальной версии Java и теряете хотя бы переносимость.

Ответ 5

Собственные Java-классы Sun являются частью их реализации Java, не являющейся частью Java API, использование которых недокументировано и не поддерживается. Поскольку они являются внутренними, они могут быть изменены в любое время по любой причине, которую решает команда, работающая с Sun JVM.

Также реализация Sun Java не единственная! Ваш код не сможет переноситься в JVM от других поставщиков, таких как Oracle/BEA и IBM.

Ответ 7

Недавно у меня был случай, который показал реальную проблему, с которой вы можете столкнуться при использовании этих классов: у нас был код, который бы не компилировался, потому что метод, который он использовал на солнце. * класс просто не существовал в OpenJDK on Ubuntu. Поэтому я предполагаю, что при использовании этих классов вы больше не можете говорить такие вещи, как "это работает с Java 5", потому что он будет работать только в определенной реализации Java.