欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Lambda表達(dá)式的使用及注意事項(xiàng)

 更新時(shí)間:2022年06月30日 09:14:53   作者:??pofenx????  
這篇文章主要介紹了Lambda表達(dá)式的使用及注意事項(xiàng),主要圍繞?Lambda表達(dá)式的省略模式?Lambda表達(dá)式和匿名內(nèi)部類(lèi)的區(qū)別的相關(guān)內(nèi)容展開(kāi)詳情,感興趣的小伙伴可以參考一下

Lambda表達(dá)式的使用

練習(xí):

  • 定義一個(gè)接口flyable,里面定義一個(gè)抽象方法 void fly(String s)
  • 定義一個(gè)測(cè)試類(lèi)flyabledemo,在測(cè)試類(lèi)中提供兩個(gè)方法

一個(gè)方法是useFlyable(Flyable f)

主方法,在主方法中調(diào)用useflyable方法

package Demo16;
public interface Flyable {
    void fly(String s );
}
package Demo16;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
public class FlyableDemo {
    public static void main(String[] args) {
        useFlyable(new Flyable() {
            @Override
            public void fly(String s) {
                System.out.println(s);
                System.out.println("飛機(jī)自駕游");
            }
        });
        System.out.println("----------------");
        useFlyable( (String s ) -> {
            System.out.println(s);
            System.out.println("飛機(jī)自駕游");
        });
    }
    private  static void useFlyable(Flyable f){
        f.fly("風(fēng)和日麗,晴空萬(wàn)里");
    }
}

練習(xí)2

  • 定義一個(gè)接口(Addable),里面定義一個(gè)抽象方法, int add(int x ,int y)
  • 定義一個(gè)測(cè)試類(lèi)(AddableDemo),在測(cè)試類(lèi)中提供兩個(gè)方法

一個(gè)方法是:useAddable(Addable)

一個(gè)主方法是,在主方法中調(diào)用useAddable方法

package Demo17;
public interface Addable {
    int add(int x ,int y);
}
package Demo17;

public class AddableDemo {
    public static void main(String[] args) {
//在主方法中調(diào)用useAddable方法
        useAddable( (int x ,int y ) ->{
            return  x+y;//簡(jiǎn)化重寫(xiě)方法可以看做
        });
    }
    private  static void useAddable(Addable a){
        int sum = a.add(10, 20);
        System.out.println(sum);
    }
}

Lambda表達(dá)式的省略模式

省略規(guī)則:

  • 參數(shù)類(lèi)型可以省略,但是有多個(gè)參數(shù)的情況下,不能只省略一個(gè)
  • 如果參數(shù)有且僅有一個(gè),那么小括號(hào)可以省略
  • 如果代碼塊的語(yǔ)句只有一條,可以省略大括號(hào)和分號(hào),甚至是return。
package Demo17;
public class AddableDemo {
    public static void main(String[] args) {
//在主方法中調(diào)用useAddable方法
//        useAddable( (int x ,int y ) ->{
//            return  x+y;//簡(jiǎn)化重寫(xiě)方法可以看做
        //參數(shù)的類(lèi)型可以省略
//        useAddable( (x,y) -> {
//            return x+y;
//        });
//        //類(lèi)型雖然可以省略,但是有多個(gè)參數(shù)的情況下不能只省略一個(gè)
//         useFlyable( (String s ) -> {
//             System.out.println(s);
//         });//如果參數(shù)有且僅有一個(gè),小括號(hào)可以省略
//        useFlyable( s -> {
//            System.out.println(s);
//        });
        //如果代碼塊的語(yǔ)句只有一條,可以省略大括號(hào)和分號(hào)
        useFlyable(  s  -> System.out.println(s));
        //useAddable( (x,y) -> return x+y);//如果有return,return也要省略,只針對(duì)代碼塊只有一條的情況
        useAddable( (x,y) -> x+y);
    }
    private  static void useAddable(Addable a){
        int sum = a.add(10, 20);
        System.out.println(sum);
    }
    private  static void useFlyable(Flyable f){
        f.fly("風(fēng)和日麗,晴空萬(wàn)里");
    }
}

Lambda使用注意事項(xiàng)

  • 使用Lambda必須要有接口,并且接口中有且僅有一個(gè)抽此昂方法
  • 必須有上下文環(huán)境,才能推導(dǎo)出lambda對(duì)應(yīng)接口

根據(jù)局部變量的賦值得知lambda對(duì)應(yīng)的接口:Runnable r = () -> System.out.println("lambda表達(dá)式");

根據(jù)調(diào)用方法的參數(shù)得知lambda對(duì)應(yīng)的接口:new Thread( () -> System.out.println("lambda表達(dá)式")).start();

package Demo18;
public class LambdaDemo {
    public static void main(String[] args) {
//        useInter( () -> {
//            System.out.println("好好學(xué)習(xí),天天向上");
//        });
        //使用Lambda必須要有接口,并且接口有且僅有一個(gè)抽象方法
        useInter( () -> System.out.println("好好學(xué)習(xí),天天向上"));
        //必須要有上下文華寧,才能推導(dǎo)出lambda對(duì)應(yīng)接口
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println("匿名內(nèi)部類(lèi)");
//            }
//        });
        Runnable r = () -> System.out.println("lambda表達(dá)式");
        new Thread(r).start();
        new Thread( () -> System.out.println("lambda表達(dá)式")).start();
    }
  private  static void useInter(Inter i ){
        i.show();
  }
}

Lambda表達(dá)式和匿名內(nèi)部類(lèi)的區(qū)別

所需類(lèi)型不同:

  • 匿名內(nèi)部類(lèi):可以是接口,也可以是抽象類(lèi),還有可以是具體類(lèi)
  • lambda表達(dá)式:只能是接口

使用限制不同:

  • 如果接口中有且僅有一個(gè)抽象方法,可以使用lambda表達(dá)式,也可以使用匿名內(nèi)部類(lèi)
  • 如果接口中多于一個(gè)抽象方法,只能使用匿名內(nèi)部類(lèi),而不能使用lambda比表達(dá)式

實(shí)現(xiàn)原理不同:

  • 匿名內(nèi)部類(lèi):編譯之后,產(chǎn)生一個(gè)單獨(dú)的.class字節(jié)碼文件
  • lambda表達(dá)式:編譯之后,沒(méi)有一個(gè)單獨(dú)的.class文件,對(duì)應(yīng)哪個(gè)的字節(jié)碼會(huì)在運(yùn)行的時(shí)候動(dòng)態(tài)生成
package Demo19;
public class LambdaDemo {
    public static void main(String[] args) {
////匿名內(nèi)部類(lèi),接口可以使用多個(gè)抽象方法
//        useInter(new Inter() {
//            @Override
//            public void show1() {
//                System.out.println("接口");
//            }
//            public void show2() {
//                System.out.println("接口");
//            }
//        });
//    useAnimal(new Animal() {
//        @Override
//        public void method() {
//            System.out.println("抽象類(lèi)");
//        }
//    });
//    useStudent(new Student(){
//        @Override
//        public void study(){
//            System.out.println("具體類(lèi)");
//        }
//    });
        //lambda,接口有且僅有一個(gè)抽象方法
        // useInter( () -> System.out.println("接口"));
        //useAnimal(() -> System.out.println("接口"));
      //  useStudent(() -> System.out.println("具體類(lèi)"));
        //使用lambda的地方參數(shù)必須是一個(gè)接口(有且只有一個(gè))

    }
    private static void useStudent(Student s ){s.study();}
    private static void useAnimal(Animal a ){a.method();}
    private  static void useInter(Inter i ){i.show1();i.show2();}
}

到此這篇關(guān)于Lambda表達(dá)式的使用及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)Lambda表達(dá)式 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Jdk11使用HttpClient提交Http2請(qǐng)求的實(shí)現(xiàn)方法

    Jdk11使用HttpClient提交Http2請(qǐng)求的實(shí)現(xiàn)方法

    這篇文章主要介紹了Jdk11使用HttpClient提交Http2請(qǐng)求的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • SpringBoot 使用@WebMvcTest測(cè)試MVC Web Controller

    SpringBoot 使用@WebMvcTest測(cè)試MVC Web Controller

    這篇文章主要介紹了SpringBoot 使用@WebMvcTest測(cè)試MVC Web Controller,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • mybatis mapper.xml 區(qū)間查詢(xún)條件詳解

    mybatis mapper.xml 區(qū)間查詢(xún)條件詳解

    這篇文章主要介紹了mybatis mapper.xml 區(qū)間查詢(xún)條件詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java 程序初始化順序

    Java 程序初始化順序

    這篇文章主要介紹了Java 程序初始化順序,在Java語(yǔ)言中,當(dāng)實(shí)例化對(duì)象時(shí),對(duì)象所在類(lèi)的所有成員變量首先要進(jìn)行初始化,只有當(dāng)所有的類(lèi)成員完成了初始化之后,才會(huì)調(diào)用對(duì)象所在類(lèi)的構(gòu)造函數(shù)創(chuàng)建對(duì)象,需要的朋友可以參考一下
    2022-01-01
  • SpringBoot中定時(shí)任務(wù)的使用方法解析

    SpringBoot中定時(shí)任務(wù)的使用方法解析

    這篇文章主要介紹了SpringBoot中定時(shí)任務(wù)的使用方法解析,@EnableScheduling?注解,它的作用是發(fā)現(xiàn)注解?@Scheduled的任務(wù)并由后臺(tái)執(zhí)行,沒(méi)有它的話(huà)將無(wú)法執(zhí)行定時(shí)任務(wù),需要的朋友可以參考下
    2024-01-01
  • MyBatis多對(duì)多映射初識(shí)教程

    MyBatis多對(duì)多映射初識(shí)教程

    這篇文章重點(diǎn)給大家介紹mybatis多對(duì)多映射,多對(duì)多映射的例子也很常見(jiàn),本文通過(guò)代碼實(shí)例相結(jié)合的方式給大家介紹mybatis多對(duì)多映射,需要的朋友參考下吧
    2016-08-08
  • 一文了解SpringBoot是如何連接數(shù)據(jù)庫(kù)的

    一文了解SpringBoot是如何連接數(shù)據(jù)庫(kù)的

    Spring Boot提供了一系列的開(kāi)箱即用的功能和特性,使得開(kāi)發(fā)人員可以快速構(gòu)建和部署應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于SpringBoot是如何連接數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • mybatis-plus自動(dòng)填充插入更新時(shí)間有8小時(shí)時(shí)差

    mybatis-plus自動(dòng)填充插入更新時(shí)間有8小時(shí)時(shí)差

    本文主要介紹了mybatis-plus自動(dòng)填充插入更新時(shí)間有8小時(shí)時(shí)差,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java中優(yōu)化大量if...else...方法總結(jié)

    java中優(yōu)化大量if...else...方法總結(jié)

    在我們平時(shí)的開(kāi)發(fā)過(guò)程中,經(jīng)??赡軙?huì)出現(xiàn)大量If else的場(chǎng)景,代碼顯的很臃腫,非常不優(yōu)雅,下面這篇文章主要給大家介紹了關(guān)于java中優(yōu)化大量if...else...方法的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • mybatis Plus 多表聯(lián)合查詢(xún)的實(shí)現(xiàn)示例

    mybatis Plus 多表聯(lián)合查詢(xún)的實(shí)現(xiàn)示例

    這篇文章主要介紹了mybatis Plus 多表聯(lián)合查詢(xún)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論