java8之lambda表达式(接口中的静态方法)

在Java8中,你能够为接口添加静态方法。从技术角度来讲,这是彻底合法的。只是它看起来违反了接口做为一个抽象定义的理念。java

至今为止, 咱们常常在相互一块儿使用的类中使用静态方法。你能够在标准库中找到像Collection/Collections或者Path/Paths这样成对的接口和类。以Paths类为例,它只有一些工厂方法。你能够经过一组字符串来构造一个路径,例如Paths.get("jdk1.8.0","jre","bin")。在java8中,Path接口中添加了这样一个方法:工具

public interface Path{
    public static Path get(String first,String... more){
        return FileSystems.getDefault().getPath(first,more);
    }
    ....
}

这样Paths类就再没有存在的必要了。spa

当你查看Coolections类时,你会发现两种方法,一种以下所示:code

public static void shuffle(List<?> list)

这类方法能够做为List接口中的一个默认方法:对象

public default void shuffle();

而后你只须要在任何list对象上调用list.shuffle()。接口

可是这样没法适用于静态的工厂方法,由于你没有可用的对象来调用该方法。所以,java8中引入了静态接口方法。例如:字符串

public static <T> List<T> nCopies(int n,T o)   //构造含有n个T类型实例的列表

它能够做为List接口的一个静态方法。这样你就能够调用List.nCopies(10,"Fred"),而不是Collections.nCopies(10,"Fred"),就可以更清楚地表示返回的结果是一个List对象。get

虽然Java的集合类不太可能像这样进行重构,可是当你实现本身的库时,没必要再为工具方法提供一个辅助的类了。在Java8中,不少接口中已经添加了静态方法。
io

相关文章
相关标签/搜索