Tim-6ren">
gpt4 book ai didi

java - 有没有办法在 24 以下的 Android API 上使用 Java 8 功能接口(interface)?

转载 作者:IT老高 更新时间:2023-10-28 23:12:07 24 4
gpt4 key购买 nike

我可以使用 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

我尝试启用 Java 8,而不是使用 retrolambda。前两个代码示例仍然有效,尽管黄油刀停止工作。 https://developer.android.com/preview/j8-jack.html#configuration这里ava.util.function据说是支持的,但是我运行第三个的时候还是会crash,这次有点不一样

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

最佳答案

不确定您是否还需要这个问题的答案,但其他人(比如我自己)可能会。

作为 3.0 版,Android Studio natively supports lambda functions以及所有 API 级别上的许多其他 Java 8 函数,但一些(如功能接口(interface)和 java.util.function)仍然仅限于 API 24+。

在扩展支持之前,android-retrostreams为其中的大部分提供反向移植支持。该项目是 streamsupport library 的“升级端口” ,您也可以使用它,并且具有 android-retrostreams 中的许多功能。 streamsupport 库支持低至 Java 6/7,因此即使您没有 AS 3.0+ 或不针对 Java 8,您也可以使用它,但在大多数情况下,您最好使用 android-retrostreams,如果你可以。您可以查看项目的 javadocs 以查看所提供的确切内容,但我使用的重点是 java.util.functionjava.util.Comparator

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

java.util.function 变成 java9.util.function,

同时

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

关于java - 有没有办法在 24 以下的 Android API 上使用 Java 8 功能接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com