# Java8

# 参阅

深入理解Java双冒号(::)运算符的使用 (opens new window) java8 :: 用法 (JDK8 双冒号用法) (opens new window)

# 概要

本文主要用来梳理java8中仍未掌握的一些内容

# 默认方法

# 多继承时接口签名相同解决方案

解决冲突的三条规则

  1. 类中的方法优先级最高, 类或父类中的方法优先级高于其默认方法的优先级
  2. 如果第一条无法判断, 子接口的优先级更高; 函数签名相同时, 优先选择拥有最具体实现的默认方法.(B继承了A, 则B更具体.)
  3. 如果仍然无法判断, 则继承多接口的类必须显示的覆盖和调用期望的方法, 显示的选择哪个方法实现.

# 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对象

  1. 声明一个空的Optional对象
Optional<Car> optCar = Optional.empty();
  1. 依据一个非空值创建Optional
Optional<Car> optCar = Optional.of(car);
  1. 可接受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));
修改于: 8/11/2022, 3:17:56 PM