default方法(defender方法)

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方法,此时会冲突,编译器无法识别是哪个方法调用

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,282评论 19 139
  • 抽象,继承,封装,多态 下面将一一解释.抽象是将一类对象的共同特征总结出来构造类的过程.包括数据抽象和行为抽象两部...
    高珊珊aim阅读 4,492评论 0 0
  • 绝大多数的人都有这样的感觉,总有那么多天心情烦闷,需要做的事做不好,需要持续干的工作总是半途而废,各种的愤怒、羞怯...
    艾问才会赢阅读 3,085评论 0 0
  • 从前的日色变得慢 ,车、马 ,邮件都慢一生只够爱一个人——木心《从前慢》 薛之谦和李雨桐在微博上闹得沸沸扬扬,一连...
    一时Oneday阅读 3,411评论 0 0
  • 20180104第九遍 发现不管是甜甜圈的道理,还是7条做人准则,又或者是朋友之间的“存钱”与“花钱”,都是在告诉...
    红琳是核桃牛奶的妈妈阅读 3,325评论 0 0

友情链接更多精彩内容