java8新特性- 默認方法 在接口中有具體的實現


案例分析

  • 在java8中在對list循環的時候,我們可以使用forEach這個方法對list進行遍歷,具體代碼如下demo所示
public static void main(String[] args) {
        List<String> stringList = new ArrayList<String>();
        stringList.forEach(s -> System.out.println(s));

    }
  • 我們將forEach方法點進去看一下實現類,如下所示:
public interface Iterable<T> {
 
    Iterator<T> iterator();
    
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
}
  • 然后我們驚奇的發現forEach的實現竟然在Iterable接口中,其實現的格式也是與其他實現類不同。

默認方法

  • 關鍵字: default 在接口中方法前面加上修飾符default 編譯器就會認為該方法並非抽象方法,可以在接口中寫實現。

設計的思想

  • 其實想一下我們就知道了,java8的改動目前為止可以說改動最大的一個版本,新版本的改動的原則是要兼容老版本的功能,所以這個默認方法自然而然的被提了出來,在接口上新增一個實現,不影響其他的抽象方法,接口的子類也不用去實現(或者實現都一樣) 該方法同時也可以使用該方法。是不是很巧妙。

實際項目中的使用

  • 我們在實際項目中,如果不方便在老的代碼上添加新的抽象方法,或者子類的實現其實都一樣,可以在接口上直接添加默認方法,子類也擁有該方法的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM