目前还不能确定 Java 7 的发行版会不会包含闭包(closures)特性,但这个疑虑却带来另外一个新的:The “public defender methods” proposal.

Java 7 试图通过简易方式为接口增加新的方法,而接口的实现类并不需要真正的实现这些新增的方法,这在 Java 7 中是通过静态方法来实现,称之为虚拟扩展方法。为了演示这个特性,我们用一个简单的例子来演示一下,这里引用的是对 List 的倒序(reverse)处理。一般我们用以下的代码对 List 列表进行倒序:List<String> strings = new ArrayList<String>();
Collections.reverse(strings);这个方法有个问题,因为是静态方法,所以不能对此方法进行重载;另外一个问题是,reverse 方法并不属于 List 接口,因此要对一个 List 列表进行排序,需要两个类。而通过虚拟扩展方法,上述的例子可以改写为:public interface List<E> extends Collection<E> {
  extension void reverse() default Collections.<E>reverse;
}这段代码为 List 接口增加了一个 reverse 的方法,并默认调用 Collections.reverse 来进行倒序处理,你现在可以这样调用倒序方法:List<String> strings = new ArrayList<String>();
strings.reverse();如此更加的OO,更酷。你也可以自行实现一个 List 接口的类,并对 reverse 方法进行重写。呵呵,挺有意思。

解决方案 »

  1.   

    “Java 7 试图通过简易方式为接口增加新的方法,而接口的实现类并不需要真正的实现这些新增的方法”从楼主的例子中,似乎是因为接口自己已经"实现"了这个方法.
      

  2.   

    public interface List<E> extends Collection<E> {
      extension void reverse() default Collections.<E>reverse;
    }
    这个文件写在哪儿?是需要在源文件里面定义。还是开发时候的动态写入。个人感觉,这种方法,其实就是 为接口的某些方法提供一个默认实现,是不是有点相当于抽象类?(除了没有构造函数)如果真这样,那是不是说明,实现了多重继承?
      

  3.   

    期待 JDK 7,如果我没记错的话 JDK 7 会在今年第四季发布。Sun 的收购严重影响了 JDK 7 发布的时间,这个时间是推之又推了。JDK 7 将带来更多的语言特性,以及更为丰富的 API 类库,比 JDK 5 带来的还要多!