что такое общее правило совместимости API java

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

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

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

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

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

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

5 ответов


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


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

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

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

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


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

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

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

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


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

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

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


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

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


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