首页 新闻 会员 周边

Lambda表达式

0
悬赏园豆:5 [已解决问题] 解决于 2024-01-11 21:49


请教各位大佬Lambda表达式这样省略为什么会报错啊

戈壁老王-的主页 戈壁老王- | 初学一级 | 园豆:191
提问于:2024-01-08 23:43
< >
分享
最佳答案
1

你可以去搜一下“变量提升”、“函数提升”,在一段代码开始之前,会将变量、方法等提升到最前面,然后到定义的地方才赋值。你举的例子,一进去,interface test 被提升到最前面了;进到main方法,test t1、test t2被提升了。所以你在main里面任何地方实例化test方法都没问题。报错的地方正如楼上所说,a-> System.out.println(a),这个a在代码任何地方都找不到定义的,自然就报错了。

收获园豆:5
TenFly | 初学一级 |园豆:69 | 2024-01-11 17:03

好的,虽然没听明白,但是您给指了一个方向,感谢

戈壁老王- | 园豆:191 (初学一级) | 2024-01-11 21:49
其他回答(2)
0

因为IDE根据上下文无法推断出你写的这个lambda得入参是什么,像这样就可以了test t3 = a -> System.out.println(a)

无敌旋律 | 园豆:206 (菜鸟二级) | 2024-01-09 09:27
0

a->System.out.println(a)是一个表达式。不是完整的一条语句。 就像 i+1 一样,都属于表达式,不能写成 i+1; , i=i+1;才是一条语句。 所以不能写成 a->System.out.println(a);

buguge | 园豆:399 (菜鸟二级) | 2024-01-10 14:26

那为啥第一条就没问题:new test()左边也没有东西啊?

支持(0) 反对(0) 戈壁老王- | 园豆:191 (初学一级) | 2024-01-10 15:58

@戈壁老王-: 表达式(expression)是可以作为函数参数的,如:10*a; 语句(statement):不能作为函数参数,如:print(a)。
new test();是一条语句(statement)。i+1是一个表达式(expression),就像cron表达式、EL表达式、lambda表达式一样,不是statement。

支持(0) 反对(0) buguge | 园豆:399 (菜鸟二级) | 2024-01-17 15:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册