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

作者: 张磊BARON | 来源:发表于2016-01-22 17:53 被阅读1002次
图片来自网络

转载请注明出处:http://www.jianshu.com/p/2b6880cb9f37


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

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

public interface Iterator<E> {

    boolean hasNext();

    E next();

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

    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

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

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

public static <T, U extends Comparable<? super U>>
    Comparator<T> comparing(Function<T, U> keyExtractor) {
    return (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
}

相关文章

  • java8 新特性总结

    java8新特性 1.接口方法默认实现:java8中接口方法可以有默认实现,需要加入default关键字。 2.L...

  • 1.Java8你需要了解的

    一、Java8新增了哪些新特性: 新特性Java8 新增了非常多的特性,我们主要讨论以下几个: 1、接口默认方法:...

  • Java8 新特性与 lambda 表达式笔记

    java8 的接口新特性 先看看下面的接口的默认方法和静态方法,感受一下: 默认实现方法 如果多继承状态下有默认方...

  • 默认方法

    默认方法 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! Java 8 新增了接口的默认方法...

  • Java 8 新特性 - 函数式接口 Functional In

    Java8的其中一个新特性,函数式接口。 什么是函数式接口?有且仅有一个抽象方法的接口(不包括默认方法、静态方法以...

  • JAVA8新特性之默认方法

    默认方法的由来 我们都知道在java8新特性中对于接口也加入了一个新的改动,那就是默认方法了,那为什么要加入这个新...

  • java 各版本新特性介绍

    java8 新特性 Java8 主要包括的新特性有: 函数式接口如果一个接口只有一个抽象方法,那么该接口就成为一个...

  • Java 8 之默认方法和静态接口方法

    转载自30分钟入门Java8之默认方法和静态接口方法 默认方法 默认方法让我们能给我们的软件库的接口增加新的方法,...

  • Java8新特性:接口的默认方法

    说明 需求缘起: Spring Boot 2.0有很多新的特性,但是这些特性是依赖JDK的版本是jdk 8+才能进...

  • Java8 新特性之默认接口方法

    摘要: 从java8开始,接口不只是一个只能声明方法的地方,我们还可以在声明方法时,给方法一个默认的实现,我们称之...

网友评论

    本文标题:Java8新特性第2章(接口默认方法)

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