2009-08-11 1 views
9

Я понимаю, что для поддержания совместимости с исходными текстами Java никогда не вводит новые методы для открытых интерфейсов, так как это нарушает существующие клиенты, реализующие интерфейсы. Java Release notes состоянияJava 6 Исходная обратная совместимость и SQL

В целом, политика выглядит следующим образом, для любых несовместимостей перечисленных ниже, за исключением:

  • Техническое обслуживание релизы (такие как 1.4.1, 1.4.2 ) не ввести любые новые языковые функции или API. Они будут поддерживать совместимость источника с друг с другом.

  • Функциональные релизы и основные выпуски (например, 1.3.0, 1.4.0, 5.0) поддерживают вверх, но не вниз источник-совместимость.

Тем не менее, пакеты java.sql и javax.sql продолжают развиваться и вводить много несовместимых изменений. Например, я заметил следующие несовместимые изменения (введенные в Java 6):

Вы знаете, как и почему эти методы были добавлены? Is java.sql обрабатывается иначе, чем остальная платформа? Знаете ли вы о дискуссиях/JSR вокруг этих дополнений?

+0

Добавление методов не нарушает совместимость, только вниз (что разрешено для основных выпусков, таких как Java 6). –

+0

Но типы 'java.sql' являются интерфейсами, а не классами. –

ответ

9

я получил следующий ответ от Sun Developer

Общая политика эволюции для интерфейсов API в JDK для выпусков художественных как JDK 7 является

  1. Не нарушить совместимость (как определено в JLSv3 главе 13)
  2. Избегайте введения источника несовместимости
  3. Управление поведенческих изменений совместимости

(Для больше, намного больше, чем вы хотели бы прочитать на различных видах совместимости см

"Kinds of Compatibility: Source, Binary, and Behavioral" и "Compatibly Evolving BigDecimal"

Добавление методов к интерфейсам является двоичным совместимый но источник несовместимыми , поэтому это обычно не делается. Как правило, чем более широко реализован интерфейс, тем меньше вероятность того, что мы добавим к нему методы. Область JDBC является исключением из этой политики и использует более лёгкие правила обновления, но это вызывает реальные проблемы, когда люди хотят перейти на новую версию JDK.

+1

Должно ли это быть «does * not * cause real issues»? – nafg

1

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

Конечно, они могли бы проектировал это лучше, так что нарушения совместимости не будет необходимости ...

4

Обратите внимание, что при добавлении новых методов только нарушить совместимость источника, уже скомпилированные реализаций Statement или ResultSet в драйвере JDBC будет продолжают работать на новом JDK. Только когда вы пытаетесь вызвать новый метод, вы получите NoSuchMethodError.

+0

Исправить. Вот почему я ограничил вопрос совместимостью с исходниками! – notnoop

+1

Неправильное использование. Он разбивает все драйверы, реализованные для Java 5. См. Мой вопрос http://stackoverflow.com/questions/1238252/how-to-make-jdbc-driver-work-in-java-5-6 –

+1

@ Запишите проблему в связанный вопрос касается бинарной нисходящей совместимости; i.e .. используя Java 6 JDK при таргетинге на Java 5 JDK. Java никогда не обещал этого! – notnoop

1

Солнце никогда не гарантирует совместимость источников между выпусками, только двоичную совместимость. Наиболее распространенным примером является то, что исходный код, содержащий идентификаторы 'assert' или 'enum', не будет компилироваться под JDK 1.4 (для assert) или 1.5+ (для перечисления), но существующие .class-файлы все равно будут выполняться под этими более новыми JVM.

Вы можете попробовать использовать флаг -source для компиляции старых .java-файлов в новых JVM-системах, но при этом вы можете столкнуться с проблемами, если полагаетесь на измененные классы jvm.

+0

Не совсем верно. Я прикрепил политику для совместимости источников в вопросе. Они более снисходительны к совместимости с исходным кодом, чем совместимость с двоичными файлами; но они обычно документируют эти изменения. Изменения в java.sql не отражены в примечаниях к выпуску. – notnoop

 Смежные вопросы

  • Нет связанных вопросов^_^