最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中雙冒號(hào)::的實(shí)現(xiàn)示例

 更新時(shí)間:2026年01月13日 09:31:03   作者:ZNineSun  
本文介紹JDK8新特性雙冒號(hào)::,它是Java中的方法引用,也是Lambda表達(dá)式寫(xiě)法之一,能簡(jiǎn)化Java開(kāi)發(fā)冗余代碼,下面還闡述了其6種使用場(chǎng)景,感興趣的可以了解一下

今天給大家分享一個(gè)JDK8中的新特性雙冒號(hào):”::“,雙冒號(hào)“::”就是 Java 中的方法引用,是Java 8中的Lambda表達(dá)式寫(xiě)法之一,一種執(zhí)行方法的方法。
在一定程度上簡(jiǎn)化了我們Java開(kāi)發(fā)的冗余代碼。

雙冒號(hào)(::)使用場(chǎng)景一般有如下6種:

類型引用語(yǔ)法案例
引用靜態(tài)方法類名::靜態(tài)方法名Integer::parseInt
引用特定對(duì)象實(shí)例方法對(duì)象::靜態(tài)方法名System.out::println
引用特定類型的任意對(duì)象的實(shí)例方法特定類型::實(shí)例方法名String::compareToIgnoreCase
引用超類(父類)的實(shí)例方法supre::方法名supre::fun
引用類構(gòu)造方法類名::newArrayList::new
引用數(shù)組構(gòu)造方法數(shù)組類型[]::newString[]::new

上面的內(nèi)容太過(guò)于官方,下面我們簡(jiǎn)單看兩個(gè)小例子:

1. Lambda表達(dá)式表達(dá)式:
person -> person.getName();
可以替換成:
Person::getName

2. Lambda表達(dá)式表達(dá)式:
() -> new HashMap<>();
可以替換成:
HashMap::new

在實(shí)際的開(kāi)發(fā)中,我們可能還會(huì)遇到很多使用雙冒號(hào)調(diào)用方法的操作

public class Test07 {
    public static void a(){
        System.out.printf("a1");
    }
    public static void a(String s){
        System.out.printf(s);
    }
    public static void main(String[] args) {
        Runnable runnable=Test07::a;
        runnable.run();
    }
}

這個(gè)時(shí)候大家能看出調(diào)用的是一個(gè)a方法嗎,我們直接運(yùn)行一下看一下結(jié)果:

說(shuō)明Runnable對(duì)應(yīng)的是無(wú)參的方法a,這是為什么呢?

原因就在于Runnable,追蹤到它的原碼不難發(fā)現(xiàn)它是一個(gè)函數(shù)式的接口

里面只有一個(gè)無(wú)參的run方法,這個(gè)方法對(duì)應(yīng)到Runnable runnable=Test07::a就是無(wú)參的方法a
如果我們想要使用有參的方法a,那么該使用什么呢?

public class Test07 {
    public static void a() {
        System.out.printf("a1");
    }

    public static void a(String s) {
        System.out.printf(s);
    }

    public static void main(String[] args) {
        Consumer<String> consumer=Test07::a;
        consumer.accept("調(diào)用有參的方法a");
    }
}

通過(guò)其源碼也可以發(fā)現(xiàn),Consumer也是一個(gè)函數(shù)式接口,里面提供了一個(gè)有參的accept方法,這個(gè)方法對(duì)應(yīng)到Test07::a就是有參的方法a,執(zhí)行之后,可以看到結(jié)果如下:

看到這兒大家應(yīng)該對(duì)什么是方法引用有了一些認(rèn)知,其本質(zhì)就是Runnable或Consumer來(lái)指向一個(gè)具體的方法,至于該使用哪一個(gè)就要看指向的方法是否有參數(shù)

可能有人就會(huì)有疑慮,因?yàn)槲覀僀onsumer的accept只能接收一個(gè)方法,那么所引用的方法也就只能對(duì)應(yīng)一個(gè)參數(shù),如果是多個(gè)參數(shù)怎么辦,像下面的方法:

    public static void a(String s1,String s2) {
        System.out.printf(s1+s2);
    }

JDK內(nèi)置了很多默認(rèn)的函數(shù)式接口,比如BiConsumer

    public static void main(String[] args) {
        BiConsumer<String,String> biConsumer=Test07::a;
        biConsumer.accept("測(cè)試","數(shù)據(jù)");
    }

可以看到它可以接收兩個(gè)參數(shù),如果參數(shù)大于等于兩個(gè),建議將參數(shù)封裝為一個(gè)對(duì)象,通過(guò)對(duì)象去傳參

上面的內(nèi)容均是無(wú)返回結(jié)果的,因?yàn)椴还苁荝unnable的run方法還是Consumer的accept方法,均無(wú)返回值,如果我們需要返回值則可以使用Callable

通過(guò)源碼不難發(fā)現(xiàn)Callable也是一個(gè)函數(shù)式接口,里面提供了一個(gè)無(wú)參的call方法,并且提供了返回值

public class Test07 {
    public static String b(){
        return "b";
    }
    public static void main(String[] args) throws Exception {
        Callable<String> runnable=Test07::b;
        String s=runnable.call();
        System.out.printf(s);
    }
}

到此這篇關(guān)于Java中雙冒號(hào)::的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Java 雙冒號(hào)::內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot自定義配置項(xiàng)過(guò)程

    SpringBoot自定義配置項(xiàng)過(guò)程

    在SpringBoot項(xiàng)目中,通過(guò)在application.properties文件中添加配置項(xiàng),然后使用@ConfigurationProperties注解將這些配置項(xiàng)與實(shí)體Bean進(jìn)行綁定,可以實(shí)現(xiàn)配置項(xiàng)與實(shí)體類字段的自動(dòng)關(guān)聯(lián),進(jìn)而方便地讀取配置文件中的數(shù)據(jù),這種方法不僅簡(jiǎn)化了配置管理
    2024-11-11
  • 關(guān)于ireport中傳入list的處理方式

    關(guān)于ireport中傳入list的處理方式

    這篇文章主要介紹了關(guān)于ireport中傳入list的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 深入探究Java線程不安全的原因與解決

    深入探究Java線程不安全的原因與解決

    線程不安全這個(gè)問(wèn)題,一般在學(xué)Java時(shí),我們老師會(huì)讓我們背誦一段長(zhǎng)長(zhǎng)的話。"當(dāng)不同線程同時(shí)能訪問(wèn)同一個(gè)變量時(shí),可能會(huì)導(dǎo)致線程不安全"。實(shí)際上,這句話重點(diǎn)想突出的只有原子性。而我們往往考慮線程不安全的原因,會(huì)從三方面進(jìn)行考慮:就是原子性,可見(jiàn)性,有序性
    2022-04-04
  • 詳解Java類加載器與雙親委派機(jī)制

    詳解Java類加載器與雙親委派機(jī)制

    這篇文章主要為大家介紹一下Java中的類加載器與雙親委派機(jī)制,文中通過(guò)示例為大家進(jìn)行了詳細(xì)的介紹,對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-08-08
  • Java 中HttpURLConnection附件上傳的實(shí)例詳解

    Java 中HttpURLConnection附件上傳的實(shí)例詳解

    這篇文章主要介紹了Java 中HttpURLConnection附件上傳的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能掌握這樣的知識(shí)內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • java返回json請(qǐng)求中文變成問(wèn)號(hào)的問(wèn)題及解決

    java返回json請(qǐng)求中文變成問(wèn)號(hào)的問(wèn)題及解決

    這篇文章主要介紹了java返回json請(qǐng)求中文變成問(wèn)號(hào)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 解決javac不是內(nèi)部或外部命令,也不是可運(yùn)行程序的報(bào)錯(cuò)問(wèn)題

    解決javac不是內(nèi)部或外部命令,也不是可運(yùn)行程序的報(bào)錯(cuò)問(wèn)題

    在學(xué)著使用Java的命令行來(lái)編譯java文件的時(shí)候,遇到了這個(gè)問(wèn)題,本文主要介紹了解決javac不是內(nèi)部或外部命令,也不是可運(yùn)行程序的報(bào)錯(cuò)問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 使用JSON.toJSONString格式化成json字符串時(shí)保留null屬性

    使用JSON.toJSONString格式化成json字符串時(shí)保留null屬性

    這篇文章主要介紹了使用JSON.toJSONString格式化成json字符串時(shí)保留null屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring Cloud應(yīng)用實(shí)現(xiàn)配置自動(dòng)刷新過(guò)程詳解

    Spring Cloud應(yīng)用實(shí)現(xiàn)配置自動(dòng)刷新過(guò)程詳解

    這篇文章主要介紹了Spring Cloud應(yīng)用實(shí)現(xiàn)配置自動(dòng)刷新過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java數(shù)組聲明、創(chuàng)建、初始化基礎(chǔ)

    Java數(shù)組聲明、創(chuàng)建、初始化基礎(chǔ)

    本文講述了Java數(shù)組的幾個(gè)相關(guān)的方面,講述了對(duì)Java數(shù)組的聲明、創(chuàng)建和初始化,并給出其對(duì)應(yīng)的代碼
    2012-12-12

最新評(píng)論

阿拉善右旗| 绥中县| 离岛区| 信丰县| 绵阳市| 湘乡市| 瑞昌市| 长丰县| 吴桥县| 柞水县| 太白县| 康乐县| 施秉县| 广东省| 曲沃县| 西贡区| 西平县| 客服| 新疆| 固始县| 乾安县| 巴楚县| 永定县| 灵丘县| 拉孜县| 远安县| 丰台区| 上犹县| 安国市| 莱阳市| 高陵县| 兰考县| 中阳县| 巨野县| 璧山县| 桐乡市| 亚东县| 出国| 大关县| 洮南市| 大荔县|