三个案例讲解Lambda表达式

发布于:2022-12-14 ⋅ 阅读:(335) ⋅ 点赞:(0)

在做练习之前呢,我们先来说一下,Lambda表达式的使用前提:

  • 有一个接口

  • 接口中只能有一个抽象方法

知道了Lambda表达式的使用前提后,我们先来看第一个练习。

练习1(无参无返回值)

  • 定义一个接口(Eatable),里面定义一个抽象方法:void eat();

  • 定义一个测试类(EatableDemo),在测试类中提供两个方法

    • 一个方法是:useEatable(Eatable e)

    • 一个方法是主方法,在主方法中调用useEatable方法 

练习2(带参无返回值)

 

练习2:

  • 定义一个接口(Flyable),里面定义一个抽象方法:void fly(String s);

  • 定义一个测试类(FlyableDemo),在测试类中提供两个方法

  • 一个方法是:useFlyable(Flyable f)

  • 一个方法是主方法,在主方法中调用useFlyable方法

练习3(带参带返回值)

练习3:

  • 定义一个接口(Addable),里面定义一个抽象方法:int add(int x,int y);

  • 定义一个测试类(AddableDemo),在测试类中提供两个方法

  • 一个方法是:useAddable(Addable a)

  • 一个方法是主方法,在主方法中调用useAddable方法

Lambda的省略模式

省略规则:

  • 参数类型可以省略。但是有多个参数的情况下,不能只省略一个

  • 如果参数有且仅有一个,那么小括号可以省略

  • 如果代码块的语句只有一条,可以省略大括号和分号,甚至是return

Lambda的省略模式案例:

 

Lambda和匿名内部类的区别

  • 所需类型不同

    • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类

    • Lambda表达式:只能是接口

  • 使用限制不同

    • 如果接口中仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类

    • 如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式

  • 实现原理不同

    • 匿名内部类:编译之后,产生一个单独的.class字节码文件

    • Lambda表达式:编译之后,你没有看到一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成

 

 

 

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到