Lmabda表达式(省略模式、注意事项、与匿名内部类的区别)

本文深入探讨了Java中的Lambda表达式,包括其省略模式、使用注意事项以及与匿名内部类的区别。重点讲解了如何在单参数或多参数情况下省略参数类型和小括号,以及如何在只有一条语句时省略大括号和分号。同时,强调了Lambda表达式必须依赖于有且仅有一个抽象方法的接口,并提供了实例来说明Lambda的上下文推断。最后对比了Lambda与匿名内部类在实现原理和使用场景上的差异。
摘要由CSDN通过智能技术生成

 Lambda表达式的省略模式

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

useAddable((int x,int y)->{
	System.out.println(“省略之前”) ;
});

useAddable((x,y)->{
	System.out.println(“省略之后”) ;
});

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

useAddable((x) ->{
	System.out.println(“省略之前”) ;
});

useAddable(x->{
	System.out.println(“省略之后”) ;
});

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

useAddable(x->{
	System.out.println(“省略之前”) ;
});

useAddable(x-> System.out.println(“省略之后”) );

Lambda表达式的注意事项

        使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法;必须有上下文环境,才能推导出Lambda对应的接口。

       通俗理解就是不能直接写 () -> System.out.println(“这样会报错”); 因为没有上下文环境。                  

       根据局部变量的赋值得知Lambda对应的接口:Runnable r = () -> System.out.println("Lambda表达式");       

 Runnable r = () -> System.out.println("Lambda表达式");

        new Thread(t).start();

根据调用方法的参数得知Lambda对应的接口:new Thread(() -> System.out.println("Lambda表达式")).start();

New Thread(()-> System.out.println("这样也就好了")).start();

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

 所需类型不同

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

Lambda表达式:只能是接口

使用限制不同

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

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

实现原理不同

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值