当前位置: 首页 > 面试题库 >

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

拓拔安邦
2023-03-14
问题内容

我可以使用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(方法名称和调用模式略有不同,但功能相同)。



 类似资料:
  • 我可以使用retrolambda启用具有Android API级别的lambdas 这同样有效 但这个不行 最后一个适用于Android API Level 24,但在其他设备上此代码会导致崩溃 我尝试启用Java8.前两个代码示例仍然可以工作,尽管Butter停止了工作。https://developer.android.com/preview/j8-jack.html#configuratio

  • 我想使用并使其直接进入给定的url,而不是从ribbon配置中获取主机。 我知道在Spring,cloud-feign默认与ribbon和eureka一起出现。 根据这个:https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html#spring-cloud-ribbon-without-eure

  • 访问 xxx_m.jpg 或 xxx_m.jpeg ,如果返回 404 或 403 ,则重定向到 xxx.jpg 或 xxx.jpeg 可以理解为实现“访问压缩图 url ,如果 访问不到,则重定向原图 url” 问了 AI ,回答我是可以实现的,但是运维同学说实现不了,不确定 AI 是不是瞎扯的,有没有大佬解答下。 下面贴下 AI 给的配置:

  • 问题内容: CSS悬停功能是否可以在移动设备上使用?我有一个css悬停类,在常规的Web浏览器上可以正常工作,但在移动浏览器上却不能工作。 问题答案: 的伪类需要定点(图形输入)设备,能够区分动作的 指向 和 选择/激活。 通常在带有触摸界面的移动设备上,您没有前者,只有后者。另外,某些笔界面仅允许激活,而不能指向。 伪类适用,而用户指定的元件(有一些指示设备),但不将其激活。例如,当光标(鼠标指

  • 问题内容: 注意:此问题仅供参考。我很想知道这样做有多深入到Python内部。 不久前,在某个问题的内部开始了一个讨论,该问题涉及传递给print语句的字符串是否可以在调用to之后/期间进行修改。例如,考虑以下功能: 现在,当运行时,到终端的输出应显示: 请注意,单词“ cat”已被单词“ dog”代替。某处某种方式能够修改这些内部缓冲区以更改打印的内容。假设这是在没有原始代码作者明确许可的情况下

  • 我想拆分我的验证器的声明和实现,与Spring boot环境中的这个问题非常相似。看起来好像是我让它几乎起作用了。我看到我的验证器实际上是由Spring验证调用的,但在执行验证后,Hibernate会抛出一个异常: 这是因为是一个接口(如预期)。 我已经这样配置了Spring(这是一个不同问题的答案): 我的自定义验证器: 所以它试图通过验证器名称找到一个Spring bean。所以我有一个验证器