美文网首页
default方法(defender方法)

default方法(defender方法)

作者: kindol | 来源:发表于2018-03-21 15:26 被阅读0次

java的接口在1.8之前只能定义方法名,而不能包含方法的具体代码。

但是,考虑到已经完成的代码项目,如果想要拓展/修改接口,好比强化Java 8 Collections API,让其支持lambda表达式的时候,就无从下手了。因而引入了新概念,称为default、defender或者虚拟扩展方法(Virtual extension methods)。

default方法是指:

在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。

举个例子:

java源码中的Iterable接口中的forEach方法以及spliterator方法

default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }

一个特别的情况:

如果一个类实现了两个接口,这两个接口又同时都包含了一个名字相同的default方法,此时会冲突,编译器无法识别是哪个方法调用

相关文章

网友评论

      本文标题:default方法(defender方法)

      本文链接:https://www.haomeiwen.com/subject/fuugqftx.html