java8开始接口里可以写静态方法是为了干啥呀?

来源:3-9 接口的默认方法和静态方法改写总不合预期?

春去_秋来

2020-09-09

java8开始接口里可以写静态方法是为了干啥呀?

写回答

1回答

张勤一

2020-09-09

春雨秋来你好:

    通常情况下,类中定义的方法都会是虚方法,当我们使用静态方法时,往往都是希望为特定的操作提供工具方法。实际上,各种第三方类库都提供了很多工具类,这些工具类集合了特定对象的很多操作方法,比如 StringUtil 提供了字符串工具。

    但是通过另一个工具类来提供静态操作,并不是最好的选择。Java 8 为接口新增静态方法后,可以把常用的工具方法直接写在接口上,可以更好地组织代码,更易阅读和使用。

    以新版的 Comparator 接口为例,新增了 comparing 静态方法,用于构造比较器。该方法的参数为 Function 函数接口,可以接收 lambda 表达式参数,从而生成比较器。

@FunctionalInterfacepublic interface Comparator<T> {

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

    在使用时,利用 comparing 方法可以很方便地得到一个比较器。而且这个方法通过 Comparator 接口去调用,代码紧凑,语义上也容易理解。

List<Integer> list = Arrays.asList(1,2,3,4,5);int min = list.stream()
    .min(Comparator.comparing(value -> value))
    .get();int max = list.stream()
    .max(Comparator.comparing(value -> value))
    .get();

    

    我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!

1
1
春去_秋来
非常感谢!
2020-09-09
共1条回复

Java实操避坑指南 SpringBoot/MySQL/Redis错误详解

掌握业务开发中各种类型的坑,,Java web开发领域通用

466 学习 · 204 问题

查看课程