Java8(下)

大多数例子来着Java8实战这本书籍中,附上作者的github https://github.com/java8

行为的多继承

如果一个接口 后许多实现类,突然 这个接口 添加了一个新的 方法,它的所有实现类 都必须实现这个方法
在开发中 这是让人爆炸的 因为 我有些类并不需要这个方法 所以 java8中引入 了defalut 来解决这个问题

public interface Sized{
     int size();
     default boolean isEmpty(){
       return size()==0;
     }
}
//突然增加一个isEmpty 如果他的实现类 没有实现这个方法也不要有问题, java8希望能借此以兼容的方式改进API,

类是有多实现的 如果 多个接口中有重名的方法,就需要处理这个问题 回使用哪个方法?

解决冲突的规则

  1. 类中的方法优先级最高。类和父类中声明的方法的优先级高于任何声明为默认方法的优先级
  2. 如果第一条无法判断,那么子接口的优先级最高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即B继承了A,那么B比A更加具体
  3. 如果前两条还算无法判断,继承了多个接口的类必须显示覆盖和调用期望的方法。
interface A {
        default void hello() {
            System.out.println("Hello from A");
        }
    }

    interface B {
        default void hello() {
            System.out.println("Hello from B");
        }
    }

    public class C implements A, B {
      
    }
//当 出现这个局面的时候 编译器 会抛出错误,需要你显示的去调用接口中的方法

  public class C implements A, B {
        @Override
        public void hello() {
            B.super.hello();
        }
    }

Optional取代null##

Optional 类只是对类进行简单的封装,当变量不存在,就被建立一个空的Optional对象,有Optional.empty()返回
Optional的创建

  Optional<Car> opCar = Optional.empty();
  //如果这一步car为null 直接在这一步就抛出异常不会再使用的使用抛出
  Optional.of(car);
  //可以接受一个为空的car
  Optional.ofNullable(car)

Optional提供的方法

  • get() 最简单但是最不安全,如果变量不存在,这抛出NoSuchElementException的异常
  • orElse(T other) 它允许在Optional对象不包含值的时候 提供一个默认值
  • orElseGet(Supplier other) 是orElse的延迟调用版,只有在对象不含值的时候才调用
  • orElseThrow(Supplier exceptionSupplier) 值为空的时候,定制抛出的异常
  • ifPrsent 让变量存在的时候才进行操作

异步编程

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值