Java中Lambda表达式基础及使用

网友投稿 255 2022-12-15

Java中Lambda表达式基础及使用

目录一、举例说明1、无参无返回1.1 定义一个接口1.2接口实现类1.3 测试类2、有参无返回代码示例3、有参有返回二、简单事项1、省略模式2、注意事项三、Lambda表达式和匿名内部类的区别1、所需类型不同:2、使用限制不同:3、实现原理不同:

标准格式:

三要素:形式参数 箭头 代码块

格式:(形式参数)->{代码块}

形式参数:如果多个参数用逗号隔开,无参留空

->:英文中划线和大于号组成

代码块:具体要做的事

使用前提:

有一个接口

接口中有且仅有一个抽象方法

一、举例说明

1、无参无返回

1.1 定义一个接口

public interface Eatable {

void eat();

}

1.2接口实现类

public class EatableImpl impMrYbtwlements Eatable{

@Override

public void eat() {

System.out.println("一天一苹果");

}

}

1.3 测试类

public class EatableDemo {

public static void main(String[] args) {

//主方法调用useEatable

Eatable e = new EatableImpl();

useEatable(e);

//匿名内部类

useEatable(new Eatable() {

@Override

public void eat() {

System.out.println("一天一苹果");

}

});

//lambda表达式

MrYbtw useEatable(() -> {

System.out.println("一天一苹果");

});

}

private static void useEatable(Eatable e){

e.eat();

}

}

2、有参无返回代码示例

public interfaceMrYbtw Eatable {

void eat(String name);

}

public class EatDemo {

public static void main(String[] args) {

useEat((String name) -> {

System.out.println(name);

System.out.println("输出的啥");

});

}

private static void useEat(Eatable e){

e.eat("苹果");

}

}

3、有参有返回

public interface Addable {

int add(int x,int y);

}

1.

2.

3.

public class AddableDemo {

public static void main(String[] args) {

useAddable( (int x,int y ) -> {

return x+y;

});

}

private static void useAddable(Addable a){

int sum = a.add(5, 7);

System.out.println(sum);

}

}

二、简单事项

1、省略模式

参数的类型可省略,多个参数时候不可只省略一个;

如果参数有且仅有一个可省略大括号和分号;

如果代码块的语句只有一条,可省略大括号和分号(有return时return也省略掉)

2、注意事项

必须要有接口,接口中有且仅有一个抽象方法

必须有上下文环境,才能推导出Lambda对应的接口:局部变量的赋值、调用方法的参数

三、Lambda表达式和匿名内部类的区别

1、所需类型不同:

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

Lambda表达式:只能是接口

2、使用限制不同:

如果接口中有且仅有一个抽象类,两者都可以使用

接口中多于一个抽象类,只能使用匿名内部类

3、实现原理不同:

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解Spring AOP自定义可重复注解没有生效问题
下一篇:关于mybatis resulttype 返回值异常的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~