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

一文詳解Java8中的方法引用與構(gòu)造器引用

 更新時間:2023年02月24日 08:53:15   作者:館主阿牛  
這篇文章主要為大家詳細(xì)介紹了Java8中的方法引用與構(gòu)造器引用的具體用法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下

前言

本節(jié)我總結(jié)結(jié)合Lambda表達(dá)式使用的方法引用,本質(zhì)上還是Lambda表達(dá)式!

什么是方法引用

當(dāng)要傳遞給 Lambda 體的操作,已經(jīng)有實(shí)現(xiàn)的方法了,可以使用方法引用!

方法引用可以看做是 Lambda 表達(dá)式深層次的表達(dá)。換句話說,方法引用就是 Lambda 表達(dá)式,也就是函數(shù)式接口的一個實(shí)例,通過方法的名字來指向一個方法,可以認(rèn)為是 Lambda 表達(dá)式的一個語法糖。

要求:實(shí)現(xiàn)接口的抽象方法的參數(shù)列表和返回值類型,必須與方法引用的方法的參數(shù)列表和返回值類型保持一致!

格式:使用操作符"::"將類(或?qū)ο螅┡c方法名分隔開來。

有如下三種主要使用情況:

  • >對象::實(shí)例方法名
  • >類::靜態(tài)方法名
  • >類::實(shí)例方法名

方法引用的三種情況案例

情況一:對象::實(shí)例方法名

public static void main(String[] args) {
        // 情況一:對象::實(shí)例方法名
        // Consumer 中的 void accept(T t)
        // void accept(T t) 與 打印流中的void println(T t) 參數(shù)類型和返回值一致,因此可以用方法引用

        // Lambda 表達(dá)式
        Consumer<String> con1 = str -> System.out.println(str);
        con1.accept("aniu1");
        // 方法引用改寫
        PrintStream ps = System.out;  //對象::實(shí)例方法名
        Consumer<String> con2 = ps::println;
        con2.accept("aniu2");

    }

情況二:類::靜態(tài)方法名

// 情況二:類::靜態(tài)方法
  // Comparator 中的 int compare(T t1,T t2)
  // int compare(T t1,T t2) 與 Integer中的int compare(T t1,T t2) 參數(shù)類型和返回值一致,因此可以用方法引用

  // Lambda 表達(dá)式
  Comparator<Integer> com3 = (t1,t2) -> Integer.compare(t1,t2);
  System.out.println(com3.compare(12, 21));
  // 方法引用改寫
  Comparator<Integer> com4 = Integer::compare;
  System.out.println(com4.compare(12, 21));

情況三:類::實(shí)例方法名

// 情況三:類::實(shí)例方法名 (有難度)---前面方法引用的要求針對的是情況一和情況二,對情況三不適用
  // Comparator 中的 int compare(T t1,T t2)
  // String 中的 int t1.compareTo(t2) // T t1 作為compareTo的調(diào)用者,T的類型作為 類::實(shí)例方法名 中的類

  // Lambda 表達(dá)式
  Comparator<String> com5 = (s1,s2) -> s1.compareTo(s2);
  System.out.println(com5.compare("A", "B"));

  // 方法引用改寫
  Comparator<String> com6 = String::compareTo;
  System.out.println(com6.compare("A", "B"));

這一塊還是比較抽象的,多去理解,我不在多舉例子!

構(gòu)造器引用

和方法引用類似,函數(shù)式接口的抽象方法的形參列表和構(gòu)造器的形參列表一致,抽象方法的返回值類型即為構(gòu)造器所屬的類的類型!

package 構(gòu)造器引用;

import java.util.function.Supplier;

/**
 * @Author:Aniu
 * @Date:2023/2/23 21:33
 * @description TODO
 */
public class Demo {
    public static void main(String[] args) {
        // 原始寫法
        Supplier<People> sup1 = new Supplier<People>() {
            @Override
            public People get() {
                return new People();
            }
        };
        sup1.get();

        // Lambda 表達(dá)式
        Supplier<People> sup2 = () -> new People();
        sup2.get();

        // 構(gòu)造器引用
        // Supplier中的T get()
        // People 的空參構(gòu)造器 People()
        Supplier<People> sup3 = People::new;
        sup3.get();
    }
}

class People{
    String name;
    int age;
    public People(){
        System.out.println("空參構(gòu)造器被調(diào)用啦!");
    }
    public  People(int a){
        this.age = a;
        System.out.println("有參構(gòu)造器被調(diào)用啦!");
    }
}

// Lambda 表達(dá)式
  Function<Integer,People> fun1 = id -> new People(id);
  fun1.apply(18);

  // 構(gòu)造器引用
  // Function 中的R apply(T t)  // 函數(shù)式接口
  // People 的有參構(gòu)造器 People(T t)
  Function<Integer,People> fun4 = People::new;
  fun1.apply(18);

還有數(shù)組引用,這里不再總結(jié),感興趣的可以去了解!

到此這篇關(guān)于一文詳解Java8中的方法引用與構(gòu)造器引用的文章就介紹到這了,更多相關(guān)Java8方法引用 構(gòu)造器引用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解JAVA泛型

    深入了解JAVA泛型

    這篇文章主要介紹了JAVA泛型的相關(guān)知識,文中代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • SpringBoot中的@ControllerAdvice使用方法詳細(xì)解析

    SpringBoot中的@ControllerAdvice使用方法詳細(xì)解析

    這篇文章主要介紹了SpringBoot中的@ControllerAdvice使用方法詳細(xì)解析, 加了@ControllerAdvice的類為那些聲明了@ExceptionHandler、@InitBinder或@ModelAttribute注解修飾的 方法的類而提供的專業(yè)化的@Component,以供多個 Controller類所共享,需要的朋友可以參考下
    2024-01-01
  • 分析JVM的執(zhí)行子系統(tǒng)

    分析JVM的執(zhí)行子系統(tǒng)

    本文主要介紹了JVM執(zhí)行子系統(tǒng)。了解虛擬機(jī)是如何執(zhí)行程序的, 虛擬機(jī)怎樣運(yùn)行一個Class文件的概念模型, 可以更好的理解怎樣寫出優(yōu)秀的代碼
    2021-06-06
  • Java?EventBus手把手帶你實(shí)現(xiàn)

    Java?EventBus手把手帶你實(shí)現(xiàn)

    EventBus是Guava的事件處理機(jī)制,是設(shè)計(jì)模式中觀察者模式(生產(chǎn)/消費(fèi)者編程模型)的優(yōu)雅實(shí)現(xiàn)。本文就來和大家聊聊EventBus的使用,需要的可以參考一下
    2023-01-01
  • java正則表達(dá)式解析html示例分享

    java正則表達(dá)式解析html示例分享

    這篇文章主要介紹了java正則表達(dá)式解析html示例,用到獲取url的正則表達(dá)式,獲取圖片的正則表達(dá)式,需要的朋友可以參考下
    2014-02-02
  • Spring Boot MyBatis 連接數(shù)據(jù)庫配置示例

    Spring Boot MyBatis 連接數(shù)據(jù)庫配置示例

    本篇文章主要介紹了Spring Boot MyBatis 連接數(shù)據(jù)庫示例的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • java使用EditText控件時不自動彈出輸入法的方法

    java使用EditText控件時不自動彈出輸入法的方法

    這篇文章主要介紹了java使用EditText控件時不自動彈出輸入法的方法,需要的朋友可以參考下
    2015-03-03
  • java -length的三種用法說明

    java -length的三種用法說明

    這篇文章主要介紹了java -length的三種用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 一文帶你深入了解Java的數(shù)據(jù)結(jié)構(gòu)

    一文帶你深入了解Java的數(shù)據(jù)結(jié)構(gòu)

    Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)中常用的幾種接口和類,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • 解決java.sql.Timestamp丟失精度的問題

    解決java.sql.Timestamp丟失精度的問題

    這篇文章主要介紹了解決java.sql.Timestamp丟失精度的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

伊通| 根河市| 遂平县| 陇南市| 西平县| 高清| 荆州市| 涿鹿县| 马尔康县| 廉江市| 绥中县| 和顺县| 新蔡县| 嘉义市| 芜湖市| 大方县| 运城市| 延吉市| 化州市| 镇雄县| 定西市| 清徐县| 淮滨县| 广汉市| 玉屏| 古田县| 光山县| 颍上县| 栖霞市| 保康县| 昭平县| 百色市| 遵义县| 北海市| 闽侯县| 黄山市| 瑞昌市| 江源县| 弥勒县| 项城市| 迁安市|