Этот верный оператор:
пакет com.sun.xml.internal является внутренним пакетом, как имя предполагает. Пользователи не должны писать код, который зависит от внутренних классов реализации JDK. Такие классы являются внутренними деталями реализации JDK и при внесении изменений без уведомления
Один из моих коллег использовал один из классов в его коде, который заставил задачу javac в сбое Муравья компилировать наш проект, поскольку компилятор не мог найти класс. В ответе от Sun/Oracle говорится, что это - ожидаемое поведение компилятора, поскольку пользователь не должен использовать пакет.
Вопрос состоит в том почему классы в пакете, обнародованном во-первых?
Спасибо,
Sarah
Классы Sun в JDK имеют префикс sun.* и не являются частью общедоступного поддерживаемого интерфейса, поэтому их следует использовать с осторожностью. Из Sun FAQ:
Классы, которые 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. packages не являются 100% Pure Java. В другими словами:
Пакеты java., javax. и org.*. документированные в Java 2 Platform Standard Edition API Specification составляют официальный, поддерживаемый публичный интерфейс.
Если программа Java напрямую вызывает только API в этих пакетах, она будет работать на всех Java-совместимых платформах, независимо от базовой платформы.
Пакеты sun.* не являются частью поддерживаемого общедоступного интерфейса.
Программа Java, которая напрямую обращается в пакеты sun.*, не гарантируется не гарантируется работа на всех Java-совместимых платформах. Фактически, такая программа не гарантируется работа даже в будущих версиях на той же платформе.
Это потому, что модификаторы видимости Java (особенно на уровне типа, где есть только две опции) в настоящее время не обладают степенью детализации, чтобы достичь той видимости, на которую вы намекаете. Я не знаю специфики внутреннего класса или классов, которые вы используете, но в основном, делая классы частными, делали бы их непригодными для использования по назначению, поэтому единственным другим вариантом был открытый.