я могу использовать retrolambda, чтобы позволить лямбды с уровнем Android API < 24. Так это работаетЕсть ли способ использовать функциональные интерфейсы Java 8 в Android API ниже 24?
myButton.setOnClickListener(view -> Timber.d("Lambdas work!"));
Это также работает
Runnable runLater =() -> Timber.d("Lambdas work!");
runLater.run();
Но это один не
Consumer<Integer> runLaterWithInt = (Integer i) -> Timber.d("i = " + i);
runLaterWithInt.accept(3);
последний работает на Android API Level 24, но на других устройствах этот код вызывает сбой
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$$Lambda$1
Вместо использования retrolambda я попытался включить Java 8. Первые два примера кода все еще работают, хотя маслобойник перестает работать. https://developer.android.com/preview/j8-jack.html#configuration здесь ava.util.function
называется поддерживаются, но я все еще получаю сбой при запуске третьей, на этот раз это немного отличается
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$-void_onCreate_android_os_Bundle_savedInstanceState_LambdaImpl1
Возможный дубликат [работает ли Java 8 на Android api 23 и выше?] (Http://stackoverflow.com/questions/35934528/does-java-8-work-on-android-api-23-and- выше) –
Вопрос плохо озаглавлен; lambdas на самом деле обращаются к старым версиям Android, поэтому вам не нужна Retrolambda. Просто установите новый Android Studio и создайте инструменты. –
Возможно, это плохо озаглавлено. Как я понимаю, мне не нужна retorlambda, если у меня есть Android N SDK, и я разрешаю опции компиляции Jack. Лямбдас работает в любом случае. Но функциональных интерфейсов от «java.util.function» до сих пор нет. – sasha199568