Android Studio: лямбда не работает
При попытке использовать лямбда-выражения я получил несколько ошибок сборки Gradle:
Ошибка:(41, 100) ошибка: лямбда-выражения не поддерживаются в -source 1.7 (используйте -source 8 или выше, чтобы включить лямбда-выражения)
Ошибка: не удалось выполнить задачу ":app:compileDebugJava". Компиляция не удалась; см. вывод ошибки компилятора для деталей.
Быстрый поиск помог мне понять, что лямбда-выражения поддерживаются только в JDK 1.8, и, видимо, я им не пользуюсь.
Моя проблема заключается в том, что JDK 1.8 действительно устанавливается на моем компьютере (я использую Yosemite). В настройках модуля → Расположение SDK → Расположение JDK написано:
Но в модуле "Настройки" → "Приложение" - "Совместимость источника / цели" нет такой опции, как "1.8", есть только опции для Java 1.6 или 1.7.
Я знаю, что могу обойтись без анонимных функций, но я все еще хочу решить эту проблему.
1 ответ
Обновление: 19 июня 2017
Джек сейчас устарел, и поддержка Java 8 будет интегрирована в существующие инструменты в будущем. Из этого поста в блоге " Поддержка будущего языка Java 8 на Android":
Мы решили добавить поддержку функций языка Java 8 непосредственно в текущий набор инструментов javac и dx, а также отказаться от набора инструментов Jack. С этим новым направлением существующие инструменты и плагины, зависящие от формата файла класса Java, должны продолжать работать. В дальнейшем функции языка Java 8 будут изначально поддерживаться системой сборки Android. Мы планируем запустить это как часть Android Studio в ближайшие недели, и мы хотели бы поделиться этим решением с вами раньше.
Обновление: 26 апреля 2016
Новая версия Android Studio (2.1) имеет поддержку функций Java 8. Вот выдержка из поста на блоге разработчиков Android:
... Релиз Android Studio 2.1 включает в себя поддержку нового компилятора Jack и поддержку Java 8.
С помощью компилятора Jack лямбды, ссылки на методы, аннотации типов во время компиляции, типы пересечений и определение типов доступны во всех версиях платформы Android. Стандартные и статические методы и повторяющиеся аннотации доступны на Android N и выше.
Чтобы использовать возможности языка Java 8 при разработке с N Developer Preview, вам необходимо использовать компилятор Jack. Мастер создания проекта [Файл → Создать → Проект] создает правильные конфигурации для проектов, ориентированных на N.
Предыдущий ответ:
Android пока не поддерживает Java 1.8 (он поддерживает только до 1.7), поэтому вы не можете использовать лямбды (как также упоминалось в одном из комментариев).
Этот ответ дает более подробную информацию о совместимости Android Studio; Говорится:
Если вы хотите использовать лямбды, одну из основных функций Java 8 в Android, вы можете использовать gradle-retrolamba
Если вы хотите узнать больше об использовании gradle-retrolambda
, этот ответ дает много подробностей о том, как это сделать.
В противном случае (и это, вероятно, лучший вариант на мой взгляд), вам нужно будет вернуться к использованию anonymous classes
(то есть, как у вас было до того, как вы переключились на использование лямбда-функций).