Java 7 : 为接口类增加“public defender 方法”

红薯 发布于 2010/06/01 06:47
阅读 521
收藏 0
JDK

目前还不能确定 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 方法进行重写。

呵呵,挺有意思。

原文译自:http://www.baptiste-wicht.com/2010/05/java-7-add-public-defender-methods-to-java-interfaces/

加载中
0
hans汉斯
hans汉斯

赞一个,希望java的sdk能尽量小和尽量灵活。平衡

0
JavaGG
JavaGG

SF居然给人占了~~~ 

这个功能确实非常cool,,不知何年何月可以用上呢

0
初级程序员
初级程序员

看上去有点像 js的 附加方法样。。。

0
张林
张林

怎么说呢,我也看了一些java7的报道,感觉他对链表和异常的写法做的比较简单化了。但是我写程序的话还是宁愿用兼容 jdk5的写法。毕竟很多人没有那么前端,都装最新的开发包,比如现在还有人用1.4呢,就像服务器,不可能像我们这样更新这么快,人家是再跑服务,稳定是第一性的。

0
安树峰
安树峰

期待java7的快速出现

返回顶部
顶部