Поддерживает ли язык Java обратную совместимость исходного кода на протяжении всей своей истории?
всегда ли Java поддерживала обратную совместимость исходного кода во время его разработки?
точнее: учитывая две версии Java X и Y с X
или существует только совместимость на уровне JVM: например, класс, скомпилированный для JVM 1.2, может запускаться JVM 5?
Если возможно запустить Java 2 код на Java 5 (или 6, или 7), каковы точные шаги, которые я должен выполнить? Непосредственно компиляции с компилятором Java 5? Компиляция с компилятором Java 2 и запуск на JVM 5?
6 ответов
Sun, и теперь Oracle, всегда были очень осторожны с обратной совместимостью в отношении Java.
двоичная совместимость: вы должны иметь возможность запускать Java-код, скомпилированный с более старыми версиями на более новых версиях без изменений. Однако могут быть небольшие несоответствия.
источник совместимости: код, первоначально написанный для более старой версии JDK, должен почти всегда компилироваться без изменений с более новой Java компилятор, но есть ряд небольших несовместимостей. Один из них -enum
ключевое слово добавлено в Java 5; в более старых версиях Java,enum
является допустимым идентификатором, но не на Java 5. Кроме того, импорт классов из пакета по умолчанию был удален (я думаю, начиная с Java 1.4). Так что вы не можете сделать:
import SomeClassName;
больше на Java 1.4 или более поздней версии.
в документации каждого выпуска JDK есть документ о обратной совместимости с предыдущими выпусками, который перечисляет детали.
запуск witg Java 1.5 enum
стало зарезервированным словом. Таким образом, любой исходный код Java 1.4, содержащий enum
сломался, начиная с 1.5
насколько я знаю, JVMs обратно совместимы. Класс, скомпилированный с JDK 1, будет работать в последнем JRE 7. Libraires определенно не на 100% совместимы. Некоторые методы были устаревшими (и впоследствии удалены). Некоторые классы изменили поведение (обычно) тонкими способами, которые заставят программы вести себя по-разному.
вы всегда можете работать с более новой версией JDK, чем та, которая используется для компиляции. Другой способ невозможен (если вы не компилируете с помощью ).
возможно, вы захотите прочитать документ (в частности Опции Кросс-Компиляции раздел), который объясняет целевой параметр и поведение по умолчанию
Java обычно совместим с предыдущими выпусками, но в любом случае это может быть много проблем с миграцией. См. мою статью о миграция из JDK 6 в 8 дополнительные сведения
вы можете посмотреть анализ обратной совместимости классов библиотеки Java (Jre) здесь:http://abi-laboratory.pro/java/tracker/timeline/jre/
отчет генерируется с помощью japi-compliance-checker.