技术开发 频道

Java 8新特性:关于默认方法的详细介绍

  如果默认方法的冲突已经解决,那么当我们修改默认方法并指定调用其中一个接口时候,invokespecial将给我们指定具体调用哪个接口的实现。

public class Clazz implements A, B {
    
public void foo(){
       A.
super.foo(); // invokespecial foo()
    }
}

  下面是javap的输出:

  public void foo();

  Code:

  0: aload_0

  1: invokespecial #2 // InterfaceMethod A.foo:()V

  4: return

  正如你看到的:invokespecial指令用来调用接口方法foo()。从字节码的视角来看,这仍是新鲜的事情,因为以前你只能通过指向一个类(父类)的而不是指向一个接口的super来调用方法。

  最后

  默认方法是对Java语言的有趣补充 – 你可以把他们看做是lambdas表达式和JDK库之间的桥梁。默认表达式的主要目标是使标准JDK接口得以进化,并且当我们最终开始使用Java 8的lambdas表达式时,提供给我们一个平滑的过渡体验。谁知道呢,也许将来我们会在API设计中看到更多的默认方法的应用。

0
相关文章