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

Lambda表達式的使用及注意事項

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

Lambda表達式的使用

練習(xí):

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

一個方法是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("飛機自駕游");
            }
        });
        System.out.println("----------------");
        useFlyable( (String s ) -> {
            System.out.println(s);
            System.out.println("飛機自駕游");
        });
    }
    private  static void useFlyable(Flyable f){
        f.fly("風(fēng)和日麗,晴空萬里");
    }
}

練習(xí)2

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

一個方法是:useAddable(Addable)

一個主方法是,在主方法中調(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;//簡化重寫方法可以看做
        });
    }
    private  static void useAddable(Addable a){
        int sum = a.add(10, 20);
        System.out.println(sum);
    }
}

Lambda表達式的省略模式

省略規(guī)則:

  • 參數(shù)類型可以省略,但是有多個參數(shù)的情況下,不能只省略一個
  • 如果參數(shù)有且僅有一個,那么小括號可以省略
  • 如果代碼塊的語句只有一條,可以省略大括號和分號,甚至是return。
package Demo17;
public class AddableDemo {
    public static void main(String[] args) {
//在主方法中調(diào)用useAddable方法
//        useAddable( (int x ,int y ) ->{
//            return  x+y;//簡化重寫方法可以看做
        //參數(shù)的類型可以省略
//        useAddable( (x,y) -> {
//            return x+y;
//        });
//        //類型雖然可以省略,但是有多個參數(shù)的情況下不能只省略一個
//         useFlyable( (String s ) -> {
//             System.out.println(s);
//         });//如果參數(shù)有且僅有一個,小括號可以省略
//        useFlyable( s -> {
//            System.out.println(s);
//        });
        //如果代碼塊的語句只有一條,可以省略大括號和分號
        useFlyable(  s  -> System.out.println(s));
        //useAddable( (x,y) -> return x+y);//如果有return,return也要省略,只針對代碼塊只有一條的情況
        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)和日麗,晴空萬里");
    }
}

Lambda使用注意事項

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

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

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

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

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

所需類型不同:

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

使用限制不同:

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

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

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

    }
    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表達式的使用及注意事項的文章就介紹到這了,更多相關(guān)Lambda表達式 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中volatile關(guān)鍵字實現(xiàn)原理

    Java中volatile關(guān)鍵字實現(xiàn)原理

    本文詳細解讀一下volatile關(guān)鍵字如何保證變量在多線程之間的可見性,對Java中volatile關(guān)鍵字實現(xiàn)原理感興趣的朋友一起通過本文學(xué)習(xí)吧
    2017-06-06
  • java實現(xiàn)識別二維碼圖片功能方法詳解與實例源碼

    java實現(xiàn)識別二維碼圖片功能方法詳解與實例源碼

    這篇文章主要介紹了java實現(xiàn)識別二維碼圖片,java無法識別二維碼情況下對二維碼圖片調(diào)優(yōu)功能方法與實例源碼,需要的朋友可以參考下
    2022-12-12
  • SpringAop日志找不到方法的處理

    SpringAop日志找不到方法的處理

    這篇文章主要介紹了SpringAop日志找不到方法的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot+Hutool實現(xiàn)圖片驗證碼的示例代碼

    SpringBoot+Hutool實現(xiàn)圖片驗證碼的示例代碼

    圖片驗證碼在注冊、登錄、交易、交互等各類場景中都發(fā)揮著巨大作用,本文主要介紹了SpringBoot+Hutool實現(xiàn)圖片驗證碼的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • IDEA配置碼云Gitee的使用詳解

    IDEA配置碼云Gitee的使用詳解

    這篇文章主要介紹了IDEA配置碼云Gitee的使用,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java移位運算符詳解實例(小結(jié))

    Java移位運算符詳解實例(小結(jié))

    這篇文章主要介紹了Java移位運算符詳解實例(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • SpringBoot+ruoyi框架文件上傳和下載的實現(xiàn)

    SpringBoot+ruoyi框架文件上傳和下載的實現(xiàn)

    文件的上傳和下載功能,是項目開發(fā)過程中比較常見的業(yè)務(wù)需求,本文主要介紹了SpringBoot+ruoyi框架文件上傳和文件下載的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • maven打包時候修改包名稱帶上git版本號和打包時間方式

    maven打包時候修改包名稱帶上git版本號和打包時間方式

    這篇文章主要介紹了maven打包時候修改包名稱帶上git版本號和打包時間方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • @Transactional注解異常報錯之多數(shù)據(jù)源詳解

    @Transactional注解異常報錯之多數(shù)據(jù)源詳解

    這篇文章主要介紹了@Transactional注解異常報錯之多數(shù)據(jù)源詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java編譯命令和啟動命令的使用方式

    java編譯命令和啟動命令的使用方式

    Java開發(fā)中,編譯源文件需使用javac命令,該命令能將.java文件編譯成.class字節(jié)碼文件,后者可在JVM上運行,常用編譯選項包括-d指定輸出目錄,-classpath設(shè)置類搜索路徑等,啟動Java程序使用java命令,它加載并運行包含main方法的類
    2024-10-10

最新評論

舟曲县| 玉树县| 家居| 临西县| 长寿区| 宣武区| 舞阳县| 游戏| 吉水县| 安多县| 探索| 广平县| 阿拉善右旗| 大化| 徐汇区| 尉氏县| 东兰县| 萨嘎县| 乌审旗| 九江市| 韶关市| 若尔盖县| 博客| 泽州县| 兴化市| 乐陵市| 江陵县| 黄梅县| 清远市| 宁乡县| 蛟河市| 乌海市| 瓦房店市| 谢通门县| 靖边县| 柞水县| 白山市| 天全县| 泰和县| 罗江县| 祁东县|