Optional
解决问题;NullPointException
value-based classes
-
- final的 and immutable的
-
- 有equals,hashcode ,tostring 基于实例本身的状态计算出来的。
-
- 基于equals方法,而不会基于 ==;
-
- 不能在两个实例中使用==,hashcode,和实例锁。
-
- 没有可访问的构造方法。通过工厂创建实例。
-
- 当equals方法返回true,两个实例可以互相替换。
-
ofNullable
-
empty
-
of
使用ifPresent()/orElse()/orElseGet()/map()方法。
方法引用
method reference
lambda表达式的语法糖
有局限性的–》只有在恰好有这个方法时才能使用方法引用的形式。
语法:
- 类名::静态方法名
- 引用名(对象名)::实例方法名
- 类名::实力方法名 Lambda表达式的第一个参数作为调用方。
- 构造方法引用 类名::new 会根据上下文推断new调用的是哪个构造方法。
默认方法
为什么要有默认方法?
- 向后兼容,为了规避接口的默认实现且不修改原有接口的原有实现。
接口中可以为抽象方法设置默认方法实现。
同时实现了不同接口的同名方法,要重写。
a接口,b接口,两个接口有同名方法时,当c类继承了a接口的实现类的同时实现了b接口,则调用a接口的实现类中重写的同名方法。