JAVA8函数式编程 笔记-类库

参考并建议阅读《Java8函数式编程》 /《java 8 实战》
----------------------------------------------------------------------------------------------------------------------------------

基本类型

java中有一些相伴的类型,如int和Integer-----前者是基本类型,后者是装箱类型。将基本类型转换为装箱类型,称为装箱,反之则称为拆箱,两者都需要额外的计算开销。为了减小这些性能开销,Stream类对基本类型和装箱类型做了区分。对基本类型做特殊处理的方法在命名上有明确规范:

       1)如果返回类型为基本类型, 则在基本类型名称前面加To
            
       2)如果参数类型是基本类型, 则不加前缀只需类型名即可
       3)如果高阶函数使用基本类型, 则在操作名后加To, 再加基本类型名, 如mapToLong

重载解析

在java中可以重载方法,造成多个方法有相同的方法名,但签名却不一样。这在推断参数类型时会带来问题,因为系统可能会推断出多种类型。这时,javac会挑出最具体的类型。

      Lambda表达式作为参数时,其类型由它的目标类型推导得出,推导过程遵循如下规则:

      1)如果只有一个可能的目标类型,由相应的函数接口里的参数类型推导得出;
      2)如果有多个可能的目标类型,由最具体的类型推导得出;
      3)如果有多个可能的目标类型且最具体的类型不明确,则需人为指定类型。

默认方法

老的接口中增加了新的方法,如果像兼容老的接口而不去改已经生成的其他子类,提供了一个新的方法叫默认方法,在任何接口中,无论函数接口还是非函数接口,都可以使用该方法。代码示例如下:

default void forEach(Consumer<? super T> action) {
     for (T t : this) {
         action.accept(t);
     }
}

重点在于代码段前新关键字default,它告诉javac用户真正需要的是为接口添加一个新的方法。注意,和类不同,接口没有成员变量,默认方法只能调用子类的方法来修改子类本身,避免了对子类的实现做出各种假设。
注意:类中重写的方法胜出,与接口中定义的默认方法相比,类中重写的方法更具体。

三定律:如果默认方法在多重继承的行为下可以遵守如下三个定律,

1)类胜于接口。
2)子类胜于父类。
3)如果上面两条规则不适用,子类要么需要实现该方法,要么将该方法声明为抽象方法。

接口的静态方法和默认方法的用法:
1)静态方法只能使用接口调用, 这是将共用工具放在接口中更加方便

2)默认方法只能使用实现类调用, 这是因为兼容。

Optional

Optional是为核心类库新设计的一个数据类型, 用于替换null值.
       1)有一个empty工厂方法用于创建空对象
       2)ofNullable可将一个Null转换成Optional对象
       3) 调用get方法获得泛型类型的对象.
      4)isPresent方法判断是否为空
      5)orElse orElseGet orElseThrow方法可以自由定制为空时的返回值/抛出异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值