default方法(defender方法)

java的接口在1.8之前只能定義方法名,而不能包含方法的具體代碼。

但是,考慮到已經(jīng)完成的代碼項(xiàng)目,如果想要拓展/修改接口,好比強(qiáng)化Java 8 Collections API,讓其支持lambda表達(dá)式的時(shí)候,就無從下手了。因而引入了新概念,稱為default、defender或者虛擬擴(kuò)展方法(Virtual extension methods)。

default方法是指:

在接口內(nèi)部包含了一些默認(rèn)的方法實(shí)現(xiàn)(也就是接口中可以包含方法體,這打破了Java之前版本對接口的語法限制),從而使得接口在進(jìn)行擴(kuò)展的時(shí)候,不會(huì)破壞與接口相關(guān)的實(shí)現(xiàn)類代碼。

舉個(gè)例子:

java源碼中的Iterable接口中的forEach方法以及spliterator方法

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);
    }

一個(gè)特別的情況:

如果一個(gè)類實(shí)現(xiàn)了兩個(gè)接口,這兩個(gè)接口又同時(shí)都包含了一個(gè)名字相同的default方法,此時(shí)會(huì)沖突,編譯器無法識(shí)別是哪個(gè)方法調(diào)用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 抽象,繼承,封裝,多態(tài) 下面將一一解釋.抽象是將一類對象的共同特征總結(jié)出來構(gòu)造類的過程.包括數(shù)據(jù)抽象和行為抽象兩部...
    高珊珊aim閱讀 997評論 0 0
  • 絕大多數(shù)的人都有這樣的感覺,總有那么多天心情煩悶,需要做的事做不好,需要持續(xù)干的工作總是半途而廢,各種的憤怒、羞怯...
    艾問才會(huì)贏閱讀 446評論 0 0
  • 從前的日色變得慢 ,車、馬 ,郵件都慢一生只夠愛一個(gè)人——木心《從前慢》 薛之謙和李雨桐在微博上鬧得沸沸揚(yáng)揚(yáng),一連...
    一時(shí)Oneday閱讀 529評論 0 0
  • 20180104第九遍 發(fā)現(xiàn)不管是甜甜圈的道理,還是7條做人準(zhǔn)則,又或者是朋友之間的“存錢”與“花錢”,都是在告訴...
    紅琳是核桃牛奶的媽媽閱讀 524評論 0 0

友情鏈接更多精彩內(nèi)容