# Java8
# 参阅
深入理解Java双冒号(::)运算符的使用 (opens new window) java8 :: 用法 (JDK8 双冒号用法) (opens new window)
# 概要
本文主要用来梳理java8中仍未掌握的一些内容
# 默认方法
# 多继承时接口签名相同解决方案
解决冲突的三条规则
- 类中的方法优先级最高, 类或父类中的方法优先级高于其默认方法的优先级
- 如果第一条无法判断, 子接口的优先级更高; 函数签名相同时, 优先选择拥有最具体实现的默认方法.(B继承了A, 则B更具体.)
- 如果仍然无法判断, 则继承多接口的类必须显示的覆盖和调用期望的方法, 显示的选择哪个方法实现.
# X.super.m(...)
Java8新引入语法来解决冲突的问题 X为父接口的名. m为你希望调用父接口的哪个方法.
//当以下情况会出现冲突问题
public interface A {
void hello(){
sout("Hello from A");
}
}
public interface B {
void hello(){
sout("Hello from B");
}
}
//此时C无法判断继承哪个方法.
public class C implements B, A {}
//解决方法
public class C implements B, A {
void hello(){
B.super.hello();
}
}
# Optional
Java8用Optional取代null
# 创建Optional对象
- 声明一个空的Optional对象
Optional<Car> optCar = Optional.empty();
- 依据一个非空值创建Optional
Optional<Car> optCar = Optional.of(car);
- 可接受null的Optional
Optional<Car> optCar = Optional.ofNullable(car);
# 从Optional对象获取值
# 零散知识
# java8的双冒号(::)运算符--方法引用
其实
引用就是代表此方法,传递引用就是传递方法
用法意义
可以将方法做成一个参数
list.forEach(System.out::println);
以下方式可以将方法单独封装成一个类
Consumer c = System.out::println;
list.forEach(x -> c.accept(x));
← Guava Java Stream流 →