在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

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

2017-2-16 13:16| 发布者: zhangjf| 查看: 1138| 评论: 0

摘要: 在Java8中,你可以为接口添加静态方法。从技术角度来说,这是完全合法的。只是它看起来违反了接口作为一个抽象定义的理念。 至今为止, 我们经常在相互一起使用的类中使用静态方法。你可以在标准库中找到像Collecti ...

在Java8中,你可以为接口添加静态方法。从技术角度来说,这是完全合法的。只是它看起来违反了接口作为一个抽象定义的理念。

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

  1. public interface Path{
  2. public static Path get(String first,String... more){
  3. return FileSystems.getDefault().getPath(first,more);
  4. }
  5. ....
  6. }
复制代码

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

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

  1. public static void shuffle(List<?> list)
复制代码

这类方法可以作为List接口中的一个默认方法:

  1. public default void shuffle();
复制代码

然后你只需要在任何list对象上调用list.shuffle()。

但是这样无法适用于静态的工厂方法,因为你没有可用的对象来调用该方法。因此,java8中引入了静态接口方法。例如:

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

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

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

来自:http://my.oschina.net/fhd/blog/420468

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-6 12:59

Copyright 2015-2025 djqfx

返回顶部