接口改善
如今接口裏已經徹底能夠定義靜態方法了. 舉一個比較廣泛的例子就是在java類庫中, 對於一些接口如Foo, 都會有一個有靜態方法的工具類Foos 來生成或者配合Foo對象實例來使用. 既然靜態方法能夠存在於接口當中, 那麼大多數狀況下 Foos工具類徹底可使用接口中的公共方法來代理 (或者將Foos置成package-private).數據結構
除此以外更重要的就是, Java 8中接口能夠定義默認的方法了.舉個例子,一個for-each循環的方法就能夠加入到java.lang.Iterable中:
1
2
3
4
5
|
public
default
void
forEach(Consumer<?
super
T> action) {
Objects.requireNonNull(action);
for
(T t :
this
) {
action.accept(t);
}
}
|
在過去,java類庫的接口中添加方法基本上是不可能的. 在接口中添加方法意味着破壞了實現了這個接口的代碼. 可是如今, 只要可以提供一個正確明智的默認的方法的實現, java類庫的維護者就能夠在接口中添加方法.
Java 8中, 大量的默認方法已經被添加到核心的JDK接口中了. 稍候我會詳細介紹它們.