网站首页 > java教程 正文
Java 17 使用 Lambda
本节思维导图
Lambda 是什么?
先发音准确再说。知道怎么读, 对这个技术才没有抵触心理。
不能每次别人问你 lamdba 是什么, 你说的是 l ~ a ~ m ~ d ~ b ~ a 吗?多读几遍。
何时出现的 Lambda
在 Java 8 中, 首次引入 Lambda 表达式, 并且在 Java 11 中又重新得到了增强。支持了在声明隐式类型 lambda 表达式的形式参数时允许使用 var 描述。以及局部变量类型推断将类型推断扩展到具有初始值设定项的局部变量的声明。
Lambda 表达式的语法
([参数]) -> {[方法体][返回值]}
对于 Lambda 表达式的使用方式, 主要是由三部分组成的。
- 没有参数的列表中, 直接使用括号() 即可, 有参数的列表中, 使用括号(int x, int y) 并在括号中包含对应的参数列表。如果只有一个参数的时候, 可以省略括号, 直接写参数名称。
- 箭头令牌 ->
- 单个表达式或者语句块组成的主体。
可以把 Lambda 表达式当做是一个匿名的方法。 多数情况下, Lambda 表达式是简化一个接口只有一个方法的时候, 使用匿名函数调用起来是复杂的问题。
举个例子,有一个求和接口有一个求和方法。 然后如果想要使用这个接口, 就有两种方式, 一种是用一个类实现该接口。然后调用实现的类, 另外一种方式直接使用匿名函数。 代码如下:
第一种方式, 类实现这个接口使用。
编写单元测试:
这里就是为了演示其用法, 所以使用最简单的案例。 这样只有一个方法再单独写一个实现, 就很麻烦, 这个时候引出第二种方式匿名函数的形式。
上面的 SumInterface.java 不发生变化。 修改单元测试的代码如下:
这里直接在使用的时候, 实现一个 SumInterface 的接口。 然后就可以调用这个匿名函数形式的实现了。 虽然这种方式比第一种方式简单了不少, 但是还是觉得不是很方便, 我能不能直接实现并返回对应的结果呢?既然问了, 答案当然是可以的。
Lambda 表达式登场。
同样是接口不发生变化。 修改测试代码, 直接使用 Lambda 表达式。
继续加深使用, 这个时候, 有个类对象中方法引用了该接口, 需要求和的计算使用方式也简单了很多。
当然除了这些在 Java 里面本身有很多封装的接口代码。比方说 javafx 中的 Button 按钮就有一个 setOnAction
让我们看看 EventHandler 接口的内容。 就只有一个handle 方法
所以就可以用我们的 Lambda 表达式, 简化使用:
现在不需要知道这个里面具体的含义, 知道就是创建一个窗口, 并且在控制台按钮点击的时候, 控制台显示 Hello World! 字符串。
Switch 增强的写法
原始的写法就是上面的方式, 这里从 Java 11 开始就可以使用下面的方式了。
忽略错误信息吧。 开发工具对于该表达式还不能识别。 所以提示了异常信息。 不影响编译和运行。
容易出现问题的地方是, 局部变量中 Lambda 的参数不可以和局部变量重复。 重复的情况下就会报错。
Lambda expression's parameter y cannot redeclare another local variable defined in an enclosing scope.
编译之后, 会提示如下的信息 方法中已经定义了对应的变量信息。
除了这些之外还有泛型和注解的使用, 因为这两个知识点还没有讲解。 后续会在这些知识说过的时候, 再来完善对应的内容。
希望本文能够给你些许的帮助。
关注, 点赞,收藏。2021 最后 20 天。让我们用学习过完 2021, 加油!
猜你喜欢
- 2024-10-03 调用百度API,文字转语音(百度文字转语音接口)
- 2024-10-03 jvm,jre和jdk的区别和联系(jdk、jre和jvm的区别与联系)
- 2024-10-03 JAVA快速入门——基本结构、基本数据类型
- 2024-10-03 我可能学了一个假“尴尬”,读“jian jie”也可以!
- 2024-10-03 零基础学Java编程 回顾 下java入门代码,写程序真的很简单。
- 2024-10-03 汉字转拼音Pinyin4j的基本用法(二)
- 2024-10-03 vue如何将文字转化为拼音(vue的字幕怎么改变位置)
- 2024-10-03 《Java拼音首字母搜索内容功能详解》值得收藏
- 2024-10-03 100个Java工具类之18:汉字转拼音工具类
- 2024-10-03 Java中汉字转化为拼音问题解决(java将汉字转换为拼音)
你 发表评论:
欢迎- 最近发表
-
- 一招解决vscode报java插件版本不一致以及相关缓存引起的问题
- 关于Java 8版本的理解(java中的接口怎么理解)
- Java 9 到 Java 16 的版本演进:一次模块化革命和语言的持续进化
- 如何选择合适的Java版本(如何选择jdk版本)
- 晚会互动小游戏(晚会节目互动小游戏)
- 基于JavaSwing的象棋游戏系统java休闲游戏jsp源代码Mysql
- Java 猜字母游戏!会写会玩才是真本事!
- 基于JavaSwing的贪吃蛇大作战java休闲游戏jsp源代码mysql
- Java & Python 康威生命游戏 - 命令行版
- 高玩随机种子无损速通《我的世界》10分钟不到刷新世界纪录
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)