资讯专栏INFORMATION COLUMN

Java8新特性第2章(接口默认方法)

UCloud / 1734人阅读

摘要:默认方法就是为了解决这一问题的,这样接口在发布之后依然能够继续演化。默认方法就是向接口增加新的行为。默认方法拥有默认实现,接口实现类通过继承得到该默认实现。

转载请注明出处:https://zhuanlan.zhihu.com/p/20540188

在Java中一个接口一旦发布就已经被定型,除非我们能够一次性的更新所有该接口的实现,否者在接口的添加新方法将会破坏现有接口的实现。默认方法就是为了解决这一问题的,这样接口在发布之后依然能够继续演化。

默认方法就是向接口增加新的行为。它是一种新的方法:接口方法可以是抽象的或者是默认的。默认方法拥有默认实现,接口实现类通过继承得到该默认实现。默认方法不是抽象的,所以我们可以放心的向函数式接口里增加默认方法,而不用担心函数式接口单抽象方法的限制。

public interface Iterator {

    boolean hasNext();

    E next();

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    default void forEachRemaining(Consumer action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

和其他方法一样,默认方法也可以被继承。

除了上面看到的默认方法,Java8中还允许我们在接口中定义静态方法。这使得我们可以从接口中直接调用它相关的辅助方法,而不是从其它的辅助类中调用(如Collections)。在做集合中元素比较的时候,我们一般需要使用静态辅助方法生成实现Comparator的比较器,在Java8中我们可以直接把该静态方法定义在Comparator接口中:

public static >
    Comparator comparing(Function keyExtractor) {
    return (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
}

如果大家喜欢这一系列的文章,欢迎关注我的知乎专栏、GitHub、简书博客。

知乎专栏:https://zhuanlan.zhihu.com/baron

GitHub:https://github.com/BaronZ88

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66490.html

相关文章

  • Java8特性1(Lambda表达式)

    摘要:一表达式匿名内部类最大的问题在于其冗余的语法,比如前面的中五行代码仅有一行是在执行任务。总结基于词法作用域的理念,表达式不可以掩盖任何其所在上下文的局部变量。 转载请注明出处:https://zhuanlan.zhihu.com/p/20540175 在介绍Lambda表达式之前,我们先来看只有单个方法的Interface(通常我们称之为回调接口): public interface...

    ningwang 评论0 收藏0
  • 在Android项目中使用Java8

    摘要:现在爸爸终于让平台支持了,这篇文章中便来和大家聊聊如何在项目中配置使用。要想在项目中使用的新特性,需要将你的升级到及以上版本,并采用新的编译。 转载请注明出处:https://zhuanlan.zhihu.com/p/23279894 前言 在过去的文章中我介绍过Java8的一些新特性,包括: Java8新特性第1章(Lambda表达式) Java8新特性第2章(接口默认方法) J...

    junnplus 评论0 收藏0
  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • Java8实战》-笔记(默认方法

    摘要:默认方法传统上,程序的接口是将相关方法按照约定组合到一起的方式。其一,允许在接口内声明静态方法。实际上,到目前为止你已经使用了多个默认方法。通过它,我们能够知道一个方法是否为默认方法。这就是默认方法试图解决的问题。 默认方法 传统上,Java程序的接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。但是,一旦类库的设计...

    sanyang 评论0 收藏0

发表评论

0条评论

UCloud

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<