亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java8-2-默認(rèn)方法和函數(shù)式接口實(shí)例其它創(chuàng)建方式

TalkingData / 3339人閱讀

摘要:最后我們來看下創(chuàng)建函數(shù)式接口的最后一種,第三種方式構(gòu)造方法引用,繼續(xù)改程序構(gòu)造方法引用構(gòu)造方法引用的語法是類名我們給新添加了一個(gè)構(gòu)造方法,該構(gòu)造方法接收一個(gè)參數(shù),不返回值,編譯通過。

上一篇文章中,我們簡單介紹了Java8的Lambda表達(dá)式以及函數(shù)式接口的概念,接下來我們繼續(xù)深入Java8函數(shù)式編程模型。

public class Test1 {
    public static void main(String[] args) {
        List list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        list.forEach(new Consumer() {
            @Override
            public void accept(Integer integer) {
                System.out.println(integer);
            }
        });
    }
}

這段程序很簡單,首先初始化一個(gè)Integer類型的集合然后向控制臺(tái)輸出每個(gè)元素。其中我們注意到forEach方法,它就是Java8中新增加的默認(rèn)方法。

public interface Iterable {
    .
    .省略
    .
    default void forEach(Consumer action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
}

它被聲明在Iterable接口中,并被關(guān)鍵字default修飾。這樣任何一個(gè)該接口的子類型都可以繼承forEach方法的實(shí)現(xiàn),所以List接口因?yàn)槭荌terable的間接子接口,所以也繼承了該默認(rèn)方法。Java8采用這種巧妙的方式既擴(kuò)展了接口的功能,又兼容了老版本。

接下來分析下forEach的實(shí)現(xiàn),首先接收了一個(gè)Consumer類型的參數(shù)action,進(jìn)行非空判斷,然后遍歷當(dāng)前所有元素交由action的accept方法進(jìn)行處理。那么Consumer又是什么鬼,看源碼

@FunctionalInterface
public interface Consumer {

    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);
    .
    .省略
    .
}

一個(gè)接口,有且僅有一個(gè)抽象方法,被@FunctionalInterface修飾,典型的函數(shù)式接口。
ok,現(xiàn)在我們知道forEach接收的Consumer類型的參數(shù)是一個(gè)函數(shù)式接口,接口里唯一的accept抽象方法接收一個(gè)參數(shù),不返回值。那通過上一篇文章我們知道,創(chuàng)建函數(shù)式接口類型的實(shí)例其中一種方式是使用Lambda表達(dá)式,所以可以將最上面的程序改造一下

public class Test1 {
    public static void main(String[] args) {
        List list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        //Lambda表達(dá)式 接收一個(gè)參數(shù) 不返回值
        list.forEach(item -> System.out.println(item));
    }
}

該lambda表達(dá)式item -> System.out.println(item)接收一個(gè)參數(shù) 不返回值,符合accept方法定義,編譯通過。
也就是說如果使用lambda表達(dá)式來創(chuàng)建一個(gè)函數(shù)式接口實(shí)例,那這個(gè)lambda表達(dá)式的入?yún)⒑头祷乇仨毞线@個(gè)函數(shù)式接口中唯一的抽象方法的定義。

接下來再對(duì)程序進(jìn)行改造

public class Test1 {
    public static void main(String[] args) {
        List list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        //方法引用
        list.forEach(System.out::println);
    }
}

看到out后面有兩個(gè)冒號(hào),反正當(dāng)時(shí)我是凌亂了。。。這個(gè)就是函數(shù)式接口實(shí)例第二種創(chuàng)建方式:方法引用
方法引用的語法是 對(duì)象::方法名(只是其中一種)
同樣,使用方法引用方式去創(chuàng)建函數(shù)式接口實(shí)例也必須遵守方法的定義,看下此處println方法源碼

public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (this) {
        print(s);
        newLine();
    }
}

接收一個(gè)參數(shù),并不返回值,編譯通過。
最后我們來看下創(chuàng)建函數(shù)式接口的最后一種,第三種方式:構(gòu)造方法引用 ,繼續(xù)改程序

public class Test1 {
    public static void main(String[] args) {
        List list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        //構(gòu)造方法引用
        list.forEach(Test1::new);
    }
    
    Test1(Integer i){
        System.out.println(i);
    }
}

構(gòu)造方法引用的語法是:類名::new
我們給Test1新添加了一個(gè)構(gòu)造方法,該構(gòu)造方法接收一個(gè)參數(shù),不返回值,編譯通過。(僅為展示構(gòu)造方法引用的用法)

結(jié)合上一篇文章可以總結(jié)一下,創(chuàng)建函數(shù)式接口類型的三種方式:
1.lambda表達(dá)式
2.方法引用
3.構(gòu)造方法引用
注意:無論是哪種方式,必須要符合抽象方法的方法定義

小結(jié):本篇我們首先介紹了接口中的默認(rèn)方法,然后又分別用幾段程序代碼展示了方法引用和構(gòu)造方法引用的使用方式,后續(xù)還會(huì)提供一些示例來加深理解,如果覺得本篇文章對(duì)你有所幫助幫忙贊一下哈。

下一篇

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/70678.html

相關(guān)文章

  • Java8新特性總覽

    摘要:新特性總覽標(biāo)簽本文主要介紹的新特性,包括表達(dá)式方法引用流默認(rèn)方法組合式異步編程新的時(shí)間,等等各個(gè)方面。還有對(duì)應(yīng)的和類型的函數(shù)連接字符串廣義的歸約匯總起始值,映射方法,二元結(jié)合二元結(jié)合。使用并行流時(shí)要注意避免共享可變狀態(tài)。 Java8新特性總覽 標(biāo)簽: java [TOC] 本文主要介紹 Java 8 的新特性,包括 Lambda 表達(dá)式、方法引用、流(Stream API)、默認(rèn)方...

    mayaohua 評(píng)論0 收藏0
  • php易錯(cuò)筆記-類與對(duì)象,命名空間

    摘要:類與對(duì)象基本概念如果在之后跟著的是一個(gè)包含有類名的字符串,則該類的一個(gè)實(shí)例被創(chuàng)建。如果該類屬于一個(gè)名字空間,則必須使用其完整名稱。如果一個(gè)類被聲明為,則不能被繼承。命名空間通過關(guān)鍵字來聲明。 類與對(duì)象 基本概念 new:如果在 new 之后跟著的是一個(gè)包含有類名的字符串,則該類的一個(gè)實(shí)例被創(chuàng)建。如果該類屬于一個(gè)名字空間,則必須使用其完整名稱。 Example #3 創(chuàng)建一個(gè)實(shí)例 ...

    MartinHan 評(píng)論0 收藏0
  • js面向?qū)ο蠹霸屠^承學(xué)習(xí)筆記。

    摘要:將構(gòu)造函數(shù)的作用域賦值給新的對(duì)象因此指向了這個(gè)新對(duì)象。以這種方式定義的構(gòu)造函數(shù)是定義在對(duì)象在瀏覽器是對(duì)象中的。構(gòu)造函數(shù)在不返回值的情況下,默認(rèn)會(huì)返回新對(duì)象實(shí)例。在創(chuàng)建子類型的實(shí)例時(shí),不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)。 創(chuàng)建對(duì)象 雖然Object構(gòu)造函數(shù)或?qū)ο笞置媪慷伎梢杂脕韯?chuàng)建單個(gè)對(duì)象,但是這些方式有明顯的缺點(diǎn):使用同一個(gè)接口創(chuàng)建很多對(duì)象,會(huì)產(chǎn)生大量的重復(fù)代碼。為解決這個(gè)問題,人們開始...

    CrazyCodes 評(píng)論0 收藏0
  • 這兒有20道大廠面試題等你查收

    摘要:本文挑選了到大廠面試題,大家在閱讀時(shí),建議不要先看我的答案,而是自己先思考一番。構(gòu)造函數(shù)返回值是或,是返回的是種返回的對(duì)象。 今年來,各大公司都縮減了HC,甚至是采取了裁員措施,在這樣的大環(huán)境之下,想要獲得一份更好的工作,必然需要付出更多的努力。 本文挑選了20到大廠面試題,大家在閱讀時(shí),建議不要先看我的答案,而是自己先思考一番。盡管,本文所有的答案,都是我在翻閱各種資料,思考并驗(yàn)證之...

    tianyu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<