Каково общее правило совместимости Java API - PullRequest
7 голосов
/ 10 сентября 2011

подробно: если мы используем, например, публичный API, напишите java-программу, например, в JDK 1.4, если она должна корректно работать во всех версиях выше.во всех версиях обновлений в 1.4, в 1.5, 1.6 и 1.7?

Кроме того, каково правило комбинируемости между различными версиями обновлений, например 1.6.22 и 1.6.23, что не может быть изменено, что может бытьизменилось?Конечно, определение публичного API не может быть изменено, как насчет других?Javadoc?определение внутреннего API, реализация?

Было бы здорово, если бы кто-то мог указать конкретный официальный документ по этой теме.спасибо,

есть один пример ошибки в документе Java, который они намеревались не менять между версиями обновлений.см. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6475885

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

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

Ответы [ 5 ]

7 голосов
/ 10 сентября 2011

Общее правило заключается в том, что любой код, который написан и скомпилирован с использованием API Java X , должен выполняться на Java Y, где Y >= X.

.исключения из этого;например, если поведение приложения зависит от недокументированного поведения (обычно ошибки) в Java X, которое было исправлено в более поздней версии.

AFAIK, нет ни одного документа, в котором перечислены эти несовместимости.Примечания к выпуску для всех основных выпусков Java включают список изменений, которые могут привести к поломке старого кода.

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


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

Чувствовать себя в безопасности не имеет значения.Тщательно протестируйте свое приложение на более поздней версии.Это практическое решение only .И это было бы в случае , даже , если бы каждая несовместимость была подробно документирована.

Подумайте об этом.Как вы можете точно знать, что изменение XYZ не повлияет на ваше приложение?Или что какая-то сторонняя библиотека, которую вы используете, не пострадает?Ответ: вы не можете.

Нет способа жаловаться здесь на то, что вы считаете, что Oracle должен решить эту проблему по-другому.Не то чтобы я думаю, что они могли бы справиться с этим лучше, не меняя бизнес-модель.Сколько вы готовы заплатить за платформу Java, которая гарантировала, что не было проблем с совместимостью версий?

2 голосов
/ 10 сентября 2011

Это не полный ответ, но я добавлю, что «будет запускаться» и «будет компилироваться» - это две разные вещи. Ключевые слова, введенные в 1.5, будут препятствовать компиляции кода 1.4, но байт-код будет работать нормально.

1 голос
/ 10 сентября 2011

Я не думаю, что JDK когда-либо изменяет API, который нарушает обратную сопоставимость (за исключением непреднамеренного).

Они ввели тег @deprecated в самом начале, вероятно, полагая, что в будущем им, возможно, потребуется выполнить некоторую очистку API. Но этого никогда не происходит. API @deprecated никогда не удалялся, а поведение не изменялось.

1 голос
/ 10 сентября 2011

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

http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html

Обычно только незначительные исправления ошибок являются причиной незначительных версий (как вы подробно описали в разделе 1.6.22 - 1.6.23), или простые улучшения, которые всегда хороши.Когда изменяются номера основных версий, можно ожидать более значительных изменений, но вы все еще «надеетесь» на обратную совместимость.

0 голосов
/ 03 декабря 2011

если мы используем открытый API, например, напишите java-программу, например, в JDK 1.4, если она должна работать правильно во всех версиях выше. во всех версиях обновления в 1.4, в 1.5, 1.6 и 1.7?

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