| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> java是如何简化成一行代码的?-----Lambda表达式初识 -> 正文阅读 |
|
[Java知识库]java是如何简化成一行代码的?-----Lambda表达式初识 |
? ? ? ? 嗨喽~小伙伴们,早上好,中午好,晚上好呀, ????????之前有一个小伙伴给我发了一段代码,说是看不懂,这段代码是这样的:
? ? ? ? 如果屏幕面前的你也不是很能够理解,且听我细讲吧。 ????????首先,在理解上述代码之前,我们需要了解一个概念-----函数式接口。
? ? ? ? 比如如下的接口便是一个最简单的函数式接口:
? ? ? ? ?如果你对jdk的源码有过深入研究的话, ????????会发现java的API中也提供了许多函数式接口,比如我们熟悉的Runnable接口和Callable接口: ? ? ? ? 细心的小伙伴会发现,上面两段源码中均对接口加上了一个注解:@FunctionalInterface?,顾名思义,这表示该接口会被设计成一个函数式接口,不符合规范的话,编译时会报错。 ? ? ? ? 那么问题来了,将接口设计成函数式接口有什么好处呢? ? ? ? ? 我们通过一个例子来领会它的妙处,首先,上一段简单的代码:
? ? ? ? 相信学过接口的小伙伴们能够很轻松地看懂上面这段代码。 ????????现在我们深入地想一想,如果ILike这个接口仅仅是在Haha这个类中使用,那我们没必要新建一个外部Like实现类,一个很自然的想法便是将Like实现类设计成静态内部类:
? ? ? ? 既然想到了设计成静态内部类,为何不干脆设计成局部内部类呢:
? ? ? ? 进一步,如果你学过匿名内部类的话,咱还可以把实现类的类名Like省略,简化成:
? ? ? ? 现在,我们来看核心代码:
? ? ? ? 上面这段代码,已经把实现接口的类的类名给省略了,我们想一想,还能不能省略点东西? ????????实际上,iLike前面已有ILike修饰,故后面的“new ILike”字样完全可以省略,不会产生歧义。 ????????而且,重点来了!!!由于ILike本身是一个函数式接口,它只有一个抽象方法 like() ,所以上面的代码中完全可以把重写的like()方法中的“死代码”去掉而不会产生歧义,甚至花括号也可以去掉,直接写成:
? ? ? ? 当然,在?jdk8(或更高)规范中,需要我们加上一个小箭头“ -> ”:
? ? ? ? 到这,我们已经将一个复杂的代码块缩短成了最简单的一行代码,这种用“->”符号来编写的表达式,便称为匿名表达式,也叫Lambda表达式。从上述过程可以看出,Lambda表达式的优点在于能够使代码变得更为简洁。 ????????注意,能够将代码缩短至一行是有一定条件的,下面的代码列举的应该包含绝大多数情况了:
? ? ? ? 理解到这,我想小伙伴们应该就能够理解本文最开始给出的那段代码了,其实就是一个简单的Lambda表达式而已:
? ? ? ? 事实上,Lambda表达式的应用远不止这些,有兴趣的小伙伴可以去查询更多的资料了解Lambda表达式的其他应用。 ? ? ? ? 那么今天的知识就分享到这里啦,喜欢的小伙伴们点个赞鼓励支持一下吧~ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:43:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |