Java interface "Default Methods"
前言
因為近期再深入研究Java Lambda,在研究Cosumer介面實發現了一件有趣的事情,以前看Java8以前的書籍都說介面不能包含實做,而現在Java8推出了Default Methods,讓開發人員可以在介面寫上有邏輯的方法了!
Default Methods
主要是透過前綴字"default",像JVM告知這一個是介面中的Default Method,範例如下
public class DefaultMethodExample {
public static void main(String[] args) {
DefaultInterface exampleA = new ExampleA();
DefaultInterface exampleB = new ExampleB();
exampleA.methodA();
exampleB.methodA();
}
public static class ExampleA implements DefaultInterface {
@Override
public void methodA() {
System.out.println("Hi! I am methodA in ExampleA");
basicMethod();
}
}
public static class ExampleB implements DefaultInterface {
@Override
public void methodA() {
System.out.println("Hi! I am methodA in ExampleB");
basicMethod();
}
}
public interface DefaultInterface {
void methodA();
default void basicMethod() {
System.out.println("Hi! I am basicMethod in DefaultInterface");
}
}
}
不專業分析
為什麼Java8會打破原則讓Interface增加Default Method呢?
我認為原因如下
- 因為目前的Java架構如果要加上Lambda方法,Default Method可以大幅減少重構的成本
- 如果沒有Default Method的話像是Collection家族,多型與繼承如此多每個都要加上forEach的話那會是很大的時間和測試成本
如果有了Default Interface我們是不是未來開發實可以減少Abstract Class的數量,讓整體架構更簡單與清晰
留言
張貼留言