Android Studio: лямбда не работает

При попытке использовать лямбда-выражения я получил несколько ошибок сборки Gradle:

Ошибка:(41, 100) ошибка: лямбда-выражения не поддерживаются в -source 1.7 (используйте -source 8 или выше, чтобы включить лямбда-выражения)

Ошибка: не удалось выполнить задачу ":app:compileDebugJava". Компиляция не удалась; см. вывод ошибки компилятора для деталей.

Быстрый поиск помог мне понять, что лямбда-выражения поддерживаются только в JDK 1.8, и, видимо, я им не пользуюсь.

Моя проблема заключается в том, что JDK 1.8 действительно устанавливается на моем компьютере (я использую Yosemite). В настройках модуля → Расположение SDK → Расположение JDK написано:

Скриншот местоположения 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 (то есть, как у вас было до того, как вы переключились на использование лямбда-функций).

Другие вопросы по тегам