java8开始接口里可以写静态方法是为了干啥呀?
来源:3-9 接口的默认方法和静态方法改写总不合预期?
春去_秋来
2020-09-09
java8开始接口里可以写静态方法是为了干啥呀?
写回答
1回答
-
春雨秋来你好:
通常情况下,类中定义的方法都会是虚方法,当我们使用静态方法时,往往都是希望为特定的操作提供工具方法。实际上,各种第三方类库都提供了很多工具类,这些工具类集合了特定对象的很多操作方法,比如 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!共同建造、维护这门课程,我需要每一个你!
112020-09-09
相似问题