JDK8的新特性——Lambda表达式的奇淫技巧(1)

首先来引入一个示例,不知给是否有在IDEA编写代码的经历,如果在JDK8的环境下如下所示按照Java传统的语法规则编写一个线程。

IDEA会给出提示可以使用Lambda表达式替换

使用Lambda表达式则只需要使用一句话就可代替上面使用匿名类的方式。

在这个例子中,传统的语法规则,我们是将一个匿名内部类作为参数进行传递,我们实现了Runnable接口,并将其作为参数传递给Thread类,这实际上我们传递的是一段代码,也即我们将代码作为了数据进行传递,这就带来许多不必要的“样板代码”。

Lambda表达式一共有三部分组成:

后面的示例中我们会详解这个结构,包括有无参数,有无返回值的问题。 那么这个看起来奇奇怪怪的不太像Java的语法规则,其本身含义到底什么呢?这也是开始困扰我的问题,什么时候在什么场景下可以使用Lambda表达式。

**能够接收Lambda表达式的参数类型,是一个只包含一个方法的接口。**只包含一个方法的接口称之为“函数接口”。

例如上面创建一个线程的示例,Runnable接口只包含一个方法,所以它被称为“函数接口”,所以它可以使用Lambad表达式来代替匿名内部类。根据这个规则,我们试着来写一个函数接口,并使用Lambda表达式作为参数传递。

测试:

可以看到,只要是一个接口中只包含一个方法,则可以使用Lambda表达式,这样的接口称之为“函数接口”。

上面的函数接口比较简单不包含参数,也不包含返回值

我们再来修改FunctionInterface函数接口逐步加大Lambda表达式的难度——包含参数,不包含返回值

测试:

关注Lambda表达式“(x) -> Sysout.out.println(“Hello World” + x)”,左边传递的是参数,此处并没有指明参数类型,因为它可以通过上下文进行类型推导,但在有些情况下不能推导出参数类型(在编译时不能推导通常IDE会提示),此时则需要指明参数类型。我个人建议,任何情况下指明函数的参数类型

哪种情况不能推导出参数类型呢?就是函数接口是一个泛型的时候。

测试:

上面的示例提到了Lambda表达式的两种情况:

无参数,无返回值;

有参数,无返回值。

接下来就是有参数,有返回值这种较为复杂的情况。

测试:

此时的Lambda表达式“(Integer x) -> true”,右边是表达式的主体,直接返回true,如果有多行代码,则可以直接使用花括号表示,例如:

Lambda表达式基本的语法规则:

无参数,无返回值,() -> System.out.println(“Hello World”);

有参数,无返回值,(x) -> System.out.println(“Hello World” + x);

有参数,有返回值,(x, y) -> x + y。

文末

架构师不是天生的,是在项目中磨练起来的,所以,我们学了技术就需要结合项目进行实战训练,那么在Android里面最常用的架构无外乎 MVC,MVP,MVVM,但是这些思想如果和模块化,层次化,组件化混和在一起,那就不是一件那么简单的事了,我们需要一个真正身经百战的架构师才能讲解透彻其中蕴含的深理。

移动架构师

系统学习技术大纲

一线互联网Android面试题总结含详解(初级到高级专题)

image

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
droid面试题总结含详解(初级到高级专题)**

[外链图片转存中…(img-wNrU9Ugb-1715569413935)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值