是否可以在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.function
和java.util.Comparator
。
请注意,java
软件包名称中的替换为java9
,并且某些类和/或方法名称可能已稍作更改。例如:
java.util.function
变java9.util.function
,
而
java.util.Comparator
成为java9.util.Comparators
(方法名称和调用模式略有不同,但功能相同)。
以上是 是否可以在24以下的Android API上使用Java 8功能接口? 的全部内容, 来源链接: utcz.com/qa/411642.html