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

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

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

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

雙冒號(::)使用場景一般有如下6種:

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

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

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

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

在實(shí)際的開發(fā)中,我們可能還會遇到很多使用雙冒號調(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();
    }
}

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

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

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

里面只有一個無參的run方法,這個方法對應(yīng)到Runnable runnable=Test07::a就是無參的方法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");
    }
}

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

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

可能有人就會有疑慮,因?yàn)槲覀僀onsumer的accept只能接收一個方法,那么所引用的方法也就只能對應(yīng)一個參數(shù),如果是多個參數(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("測試","數(shù)據(jù)");
    }

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

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

通過源碼不難發(fā)現(xiàn)Callable也是一個函數(shù)式接口,里面提供了一個無參的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中雙冒號::的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Java 雙冒號::內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    java返回json請求中文變成問號的問題及解決

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

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

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

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

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

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

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

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

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

最新評論

平遥县| 新余市| 通州市| 梁河县| 宁夏| 陇川县| 玉树县| 五家渠市| 化德县| 盖州市| 昌图县| 九龙县| 洪雅县| 沭阳县| 晋州市| 玉山县| 肃南| 霞浦县| 高台县| 安溪县| 加查县| 永春县| 札达县| 磐安县| 镇康县| 吉木乃县| 黎平县| 鄯善县| 海兴县| 普兰店市| 随州市| 阿拉善左旗| 德令哈市| 临汾市| 阳原县| 沛县| 鹤山市| 封开县| 西畴县| 来宾市| 贵港市|