大多数例子来着Java8实战这本书籍中,附上作者的github https://github.com/java8
行为的多继承
如果一个接口 后许多实现类,突然 这个接口 添加了一个新的 方法,它的所有实现类 都必须实现这个方法 在开发中 这是让人爆炸的 因为 我有些类并不需要这个方法 所以 java8中引入 了defalut 来解决这个问题
public interface Sized{
int size();
default boolean isEmpty(){
return size()==0;
}
}
//突然增加一个isEmpty 如果他的实现类 没有实现这个方法也不要有问题, java8希望能借此以兼容的方式改进API,
类是有多实现的 如果 多个接口中有重名的方法,就需要处理这个问题 回使用哪个方法?
解决冲突的规则
类中的方法优先级最高。类和父类中声明的方法的优先级高于任何声明为默认方法的优先级如果第一条无法判断,那么子接口的优先级最高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即B继承了A,那么B比A更加具体如果前两条还算无法判断,继承了多个接口的类必须显示覆盖和调用期望的方法。
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 让变量存在的时候才进行操作
异步编程
未完待续
转载请注明原文地址: https://ju.6miu.com/read-1300173.html