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的數量,讓整體架構更簡單與清晰

素材

Java doc
菜鳥工程師 肉豬 部落格

留言

這個網誌中的熱門文章

Java Lambda Map篇

(InterviewBit) System Design - Design Cache System

設計模式 - 享元模式 (Structural Patterns - Flyweight Design Pattern)