java1.8实战学习(二)——总结:流处理、行为参数化、并行与共享

上一篇:java1.8实战学习(一)

下一篇:java1.8实战学习(三)

我们继续来看

  • 默认方法

在加入所有这些新玩意儿改进Java 的时候, Java 8 设计者发现的一个现实问题就是现有的接口也在改进。比如,
Collections.sort方法真的应该属于List接口,但却从来没有放在后者里。理想的情况下,你会希望做list.sort(comparator),而不是Collections.sort(list, comparator)。这看起来无关紧要,但是在Java 8之前,你可能会更新一个接口,然后发现你把所有实现它的类

也给更新了——简直是逻辑灾难!这个问题在Java 8里由默认方法解决了。

在上节中,我们给出了下面这段Java 8示例代码:

List<Apple> heavyApples1 = 
 inventory.stream().filter((Apple a) -> a.getWeight() > 150) 
 .collect(toList()); 
List<Apple> heavyApples2 = 
 inventory.parallelStream().filter((Apple a) -> a.getWeight() > 150) 
 .collect(toList()); 

 

但这里有个问题:在Java 8之前,List<T>并没有stream或parallelStream方法,它实现的Collection<T>接口也没有,因为当初还没有想到这些方法嘛!可没有这些方法,这些代码就不能编译。

Java 8的解决方法就是打破最后一环——接口如今可以包含实现类没有提供实现的方法签名了!那谁来实现它呢?缺失的方法主体随接口提供了(因此就有了默认实现),而不是由实现类提供。
这就给接口设计者提供了一个扩充接口的方式,而不会破坏现有的代码。Java 8在接口声明中使用新的default关键字来表示这一点。

例如,在Java 8里,你现在可以直接对List调用sort方法。它是用Java 8 List接口中如下所示的默认方法实现的,它会调用Collections.sort静态方法:

default void sort(Comparator<? super E> c) { 
 Collections.sort(this, c); 
} 

这意味着List的任何实体类都不需要显式实现sort,而在以前的Java版本中,除非提供了
sort的实现,否则这些实体类在重新编译时都会失败。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值