Если я использую библиотеку Java 8 для кодирования приложения и попытаюсь скомпилировать его с помощью компилятора Java 6, произойдет ли сбой сборки? - PullRequest
0 голосов
/ 06 марта 2019

У меня на ноутбуке Java 8.Я использовал библиотеку java.time для написания небольшого фрагмента кода для расчета времени обработки приложения с использованием Eclipse IDE v4.9 (выпуск 2018-09).В проекте использовалась версия компилятора Java 1.6.Затем я запустил приложение на своем ноутбуке, и оно запустилось без ошибок, и оно дало ожидаемый результат.Затем я экспортировал приложение в файл war, используя компилятор Java 1.6, чтобы запустить его на сервере Tomcat 6 под управлением Java 1.7 vm.Я столкнулся со следующей ситуацией:

  1. В файле журнала не было ошибок.Уровень журнала был установлен на отладку.
  2. Приложение обрабатывает строки базы данных и, основываясь на некоторой логике, вставляет в 4 разные таблицы базы данных.Во время опроса входной таблицы базы данных приложение не подбирало допустимые входные строки.
  3. Я установил Java 7 на свой ноутбук, сделал Java 7 рабочей средой JRE, а фрагмент кода вызвал ошибку компиляции.

Мой вопрос: когда я использую компилятор Java 6 для компиляции кода на основе библиотеки Java 8, разве сборка не должна завершиться неудачей?Ни разу во время всего упражнения не было ошибок приложения, и оно успешно работало на моем ноутбуке и показало ожидаемый результат (очевидно, из-за моего ноутбука с Java 8 vm).То, как я уловил причину проблемы, было чистой случайностью.Это ошибка Java или известная проблема?

Обновление: я не ищу решения проблемы.Я ищу объяснение поведения компилятора Java.

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

Если вы используете maven, ваш код будет запущен. Но вы должны быть уверены, что используете функциональность только из выбранной версии Java.

0 голосов
/ 06 марта 2019

Да, это может не сработать, если вы используете функцию, представленную в версиях Java 7+ Процитирую несколько:

  1. библиотека java.time.
  2. Синтаксис Diamond: Список список = новый ArrayList <> ();
  3. Лямбда или потоковые функции.
  4. Строки в операторах switch.
  5. Метод forEach () в интерфейсе Iterable.
  6. стандартные и статические методы в интерфейсах.

Это не полный список, а несколько примеров.

0 голосов
/ 06 марта 2019

Пакет java.time был представлен только в Java 8. Поэтому, если вы используете его, ваш код не будет работать в предыдущих версиях JVM.

Вам следует изменить версию JVM вашего Tomcat или удалить зависимую java.timeкод из вашего проекта.

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