Можно ли скомпилировать файлы классов с помощью Java 7 SDK, который может работать на Java 6 JVM?
=================================================================================================

Поскольку общедоступная Java 6 SE JRE становится все ближе к ее EOL (ноябрь 12), я собираюсь перенести свои проекты с Java 6 на Java 7. Это не будет большой проблемой, если Apple предоставит Java 7 JRE для Mac OS X. Но поскольку Apple не желает этого делать, мне все равно приходится поддерживать пользователей, которые имеют только Java 6 JRE.

Есть ли способ компилировать Java 6-совместимые двоичные файлы (файлы классов) с Java 7 javac? Конечно, я знаю, что не могу использовать новые функции Java 7 при этом.

Спасибо в ожидании!

Java 7, вы можете запустить компилятор Java с помощью команды`-source 1.6` а также`-target 1.6` опции. Но если вы используете расширения языка Java 7, то`-source 1.6` приведет к ошибкам компиляции.

Certainly I'm aware that I can't use the new Java 7 features when doing so.

Это включает в себя возможности языка Java 7 ... и зависимости от изменений Java 7 в стандартных API библиотек классов. Также имейте в виду, что существует небольшое количество поведенческих различий (так называемые исправления ошибок API), которые могут привести к тому, что код будет выполняться по-разному в Java 6 и Java 7. Они должны быть описаны в документе перехода от Java 6 к Java 7.

**UPDATE** - Это, вероятно, больше не проблема для вас, потому что Oracle выпустила Java 7 для Mac OSX.



 но не полный. Ваши программы на Java 7 не будут компилироваться в Java 6, если они используют функции языка Java 7, но имейте в виду, что могут возникать и другие незначительные ошибки при одном кодировании разработчика в Java 6 и другом при компиляции Java 7.

Возьмите для примера java.sql.Driver. В Java 7 интерфейс получил дополнительный метод.

**Java 7 Developer**
Этот разработчик реализует интерфейс драйвера и использует «Override». аннотация о реализованном дополнительном методе драйвера. Программа прекрасно компилируется как программа на Java 6, потому что класс, который видит компилятор Java 6, имеет этот метод, и код регистрируется. Компиляция программы как Java 6 не означает, что компилятор Java 6 автоматически переключится на использование источника Java 6 код!

**Java 6 Developer**
Разработчик Java 6 пытается создать код, который разработчик Java 7 совершил, и получает ошибку компиляции, даже несмотря на то, что разработчик Java 7 не реализовывал никаких языковых конструкций Java 7.

Следовательно, даже если выcould скомпилируйте его как Java 6, я бы порекомендовал не делать этого.





 но в некоторых случаях нет. В java 1.6 у них не было попытки с ресурсами, переключения со строками или операторов multi catch и т. Д. Поэтому эти части программы не будут компилироваться. Но идея Java компилируется один раз, запускается везде; поэтому код может работать на старых JVM