Вопрос-ответ

It is a bad practice to use Sun's proprietary Java classes?

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

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

Переведено автоматически
Ответ 1

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

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

Ответ 2

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

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


Классы, которые Sun включает в Java 2 SDK, Standard Edition, делятся на группы пакетов 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: sun.* классы - это то, что заставляет классы платформы Java работать "под прикрытием" для Sun Java 2 SDK. Эти классы, как правило, не будут присутствовать на платформе Java другого производителя. Если ваша Java-программа запрашивает класс "sun.package.Foo" по имени, это может привести к сбою с ClassNotFoundError , и вы потеряете главное преимущество разработки на Java.


Ответ 3

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

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

Ответ 4

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

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

java