Java-8新特性:学习如何使用Lambda表达式(二,我凭着这套“神级PDF文档”吊打面试官

本文介绍了Java 8中的Lambda表达式,包括构造函数引用和可变范围的使用,强调了Lambda如何捕获并处理封闭范围的变量。此外,还讨论了默认方法这一新特性,如何解决接口升级带来的兼容性问题,以及当默认方法与基类方法冲突时的处理策略。
摘要由CSDN通过智能技术生成

构造函数参考

构造函数引用与方法引用相同,只是方法名称为new。例如,Button::new是类的构造函数引用Button。将调用哪个构造函数取决于上下文。想象一下,您想要将字符串列表转换为按钮数组。在这种情况下,您应该在每个字符串上调用构造函数。它可能是这样的:

List strs = …;
Stream stream = strs.stream().map(Button::new);
List buttons = stream.collect(Collectors.toList());

有关stream的更多信息,您可以查看文档。在这种情况下,最重要的是该方法为每个列表元素调用构造函数。有多个构造函数,但编译器选择带有参数的构造函数,因为从上下文中可以明显看出应该调用带有字符串的构造函数。map``collect``map``Button(String)``Button``String

还可以为数组类型创建构造函数引用。例如,int数组的构造函数引用是int[]::new。它需要一个参数:数组的长度。它等同于lambda表达式x -> new int[x]

数组的构造函数引用对于超越Java的限制很有用。创建泛型类型的数组是不可能的T。表达式new T[n]不正确,因为它将替换为new Object[n]。对于图书馆作者来说这是一个问题。想象一下,我们想拥有一系列按钮。有一种方法toArray在类Stream返回的数组Object

Object[] buttons = stream.toArray();

但那不是你想要的。用户不想要Objects,只有按钮。该库使用构造函数引用解决了这个问题。你应该传递Button[]::new给方法toArray

Button[] buttons = stream.toArray(Button[]::new);

toArray方法调用此构造函数以获取所需类型的数组,然后在填充后返回此数组。

可变范围

通常,您希望从lambda表达式中的封闭范围访问变量。考虑以下代码:

public static void repeatText(String text, int count) {
Runnable r = () -> {
for (in

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值