转载

Java 8 默认接口实现及其他语言特性

一、为什么有默认接口实现

1、由于Java 8的API在现存的接口上引入了非常多的新方法(如List接口上的sort方法)。在原有语法基础上,如Guava和Apache Commons这样的框架都需要修改实现了List接口的所有类。

2、为了解决这个问题,Java 8中的接口现在支持在声明方法的同时提供实现。主要有两种方式:

1)、Java 8允许在接口内声明静态方法。

2)、Java 8引入了一个新功能,叫默认方法,通过默认方法你可以指定接口方法的默认实现。

这种机制可以使你平滑地进行接口的优化和演进

二、冲突解决

我们知道Java语言中一个类只能继承一个父类,但是一个类可以实现多个接口。随着默认方法在Java 8中引入,有可能出现一个类继承了多个方法而它们使用的却是同样的函数签名。这种情况下,类会选择使用哪一个函数?

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

}




public interface InterfaceB extends InterfaceA{

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



public class ClassC implements InterfaceA,InterfaceB{

    public static void main(String[] args) {
        new ClassC().hello();
    }
}




public class ClassC implements InterfaceA,InterfaceB{

    public static void main(String[] args) {
        new ClassC().hello();
    }
}




result:Hello from B

如果一个类使用相同的函数签名从多个地方(比如另一个类或接口)继承了方法,通过三条规则可以进行判断。

(1) 类中的方法优先级最高。类或父类中声明的方法的优先级高于任何声明为默认方法的优先级。

(2) 如果无法依据第一条进行判断,那么子接口的优先级更高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即如果B继承了A,那么B就比A更加具体。

(3) 最后,如果还是无法判断,继承了多个接口的类必须通过显式覆盖和调用期望的方法,

一、重复注解 Java 8 默认接口实现及其他语言特性

二、集合类新增方法 Java 8 默认接口实现及其他语言特性

三、CompletableFuture Java 8 默认接口实现及其他语言特性

四、ConcurrentHashMap Java 8 默认接口实现及其他语言特性

五、String Java 8 默认接口实现及其他语言特性

六、 Files Java 8 默认接口实现及其他语言特性

七、 精简JRE

Java8提供了三种紧凑的JRE,分别是compact1、compact2、compact3,他们的关系是compact1<compact2<compact3,他们包含的API如下图所示

Java 8 默认接口实现及其他语言特性

八、 删除PermGen space

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域这一部分用于存放Class和Meta的信息。Java8使用本地内存来存储类元数据信息并称之为:元空间( Metaspace),默认情况下,类元数据只受可用的本地内存限制。

Java 8 默认接口实现及其他语言特性

九、Nashorn

Java 8 默认接口实现及其他语言特性

本文作者: 魂皓轩 欢迎关注公众号

Java 8 默认接口实现及其他语言特性

本人保留所有权益,转载请注明出处。

欢迎有故事、有想法的朋友和我分享,可发送至 e-mail: lwqforit@163.com

原文  https://segmentfault.com/a/1190000021251511
正文到此结束
Loading...