是否可以在24以下的Android API上使用Java 8功能接口?

我可以使用retrolambda启用Android API级别<24的lambda。所以这有效

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而是尝试启用Java8。尽管前者已停止运行,但前两个代码示例仍然有效。据说这里支持https://developer.android.com/preview/j8-jack.html#configurationava.util.function,但是运行第三个时我仍然会崩溃,这次有点不同

java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$-void_onCreate_android_os_Bundle_savedInstanceState_LambdaImpl1

回答:

不知道您是否仍然需要这个问题的答案,但是其他人(例如我自己)可能会回答。

从3.0版开始,Android Studio

在所有API级别上都原生支持lambda函数和许多其他Java

8函数,但是其中某些(如Functional Interfaces和java.util.function)仍然仅限于24+ API。

在扩展该支持之前,android-retrostreams为其提供了大多数反向支持。该项目是streamsupport库的“升级端口”

,您也可以使用它,并在android-retrostreams中具有许多功能。streamsupport库最多支持Java 6/7,因此即使您没有AS

3.0+或未针对Java 8,也可以使用它,但在大多数情况下,最好使用android-

retrostreams您可以。您可以浏览该项目的javadocs,以准确了解所提供的内容,但我使用的重点是java.util.functionjava.util.Comparator

请注意,java软件包名称中的替换为java9,并且某些类和/或方法名称可能已稍作更改。例如:

java.util.functionjava9.util.function

java.util.Comparator成为java9.util.Comparators(方法名称和调用模式略有不同,但功能相同)。

以上是 是否可以在24以下的Android API上使用Java 8功能接口? 的全部内容, 来源链接: utcz.com/qa/411642.html

回到顶部