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