Lambda表达式入门(下篇),android开发网络框架

System.out.println( (Runnable)() -> {} ); // 正确

我们可以定义一个无参数,无返回值的接口,类似Runnable

@FunctionalInterface
public interface MyRunnable {
public void run();
}

那下面的写法,都是正确的

Runnable r1 = () -> {System.out.println(“Hello Lambda!”);};
MyRunnable r2 = () -> {System.out.println(“Hello Lambda!”);};

这说明一个Lambda表达式可以有多个目标类型(函数接口),只要函数匹配成功即可。
但需注意一个Lambda表达式必须至少有一个目标类型

Lambda的域以及访问限制

域即作用域,Lambda表达式中的参数列表中的参数在该Lambda表达式范围内(域)有效。在作用Lambda表达式内,可以访问外部的变量:局部变量、类变量和静态变量,但操作受限程度不一
1、访问局部变量

在Lambda表达式外部的局部变量会被JVM隐式的编译成final类型,因此只能访问外而不能修改。

Lambda表达式入门(下篇),android开发网络框架_第1张图片
2、访问静态变量和成员变量

在Lambda表达式内部,对静态变量和成员变量可读可写。

Lambda表达式入门(下篇),android开发网络框架_第2张图片

内置函数式接口

小伙伴们有没有发现,如果使用Lambda表达式,还是需要我们自己写一个接口定义的,其实很多接口无非是入参类型和返回值不一样而已,所以Java给我们提供了几个常用的标准函数接口:

Consumer< T >con 消费型接口: void accept(T t);
Supplier< T >sup供给型接口 : T get();
Function< T , R >fun 函数型接口 : R apply (T t);
Predicate< T >: 断言型接口 : boolean test(T t);

1、Consumer 消费型接口

接口中的方法为 void accept(T t),1个参数,无返回值。调用方要传入值,而不需要返回,形象比喻成消费型

Lambda表达式入门(下篇),android开发网络框架_第3张图片
这个就是对传入num参数值,进行相关的处理(消费)。到底进行处理,具体就在

(num) -> System.out.println(“消费了” + num)

上面的代码中,是一个典型的1个参数,无返回值的消费;如果没有内置的函数接口,那我们就需要自己定义一个,如:

interface MyConsumer{
void doFunction(T t);
}

我们发现和内置函数接口,没有什么区别,就是接口名和方法名称不一样而已,其实本质是一样的,这就是为什么Java会提供一些内置的函数,这样可以减少大量的代码。
2、Supplier供给型接口

接口中的方法 T get(),无参数,有返回值;不需要对方给参数,而是一直返回给对方,形象定义为供给型接口

Lambda表达式入门(下篇),android开发网络框架_第4张图片
上面代码就是返回一个新的实体对象。
3、Function函数式接口

接口中的方法 R apply (T t),有参数,有返回值;典型的函数,所以形象比喻成函数型接口

Lambda表达式入门(下篇),android开发网络框架_第5张图片
接口实现转换成大写的字符。
4、Predicate断言型接口

接口中方法 boolean test(T t),有参数,返回boolean,是一个条件检查式方法,比喻成断言型接口

Lambda表达式入门(下篇),android开发网络框架_第6张图片

资源分享

  • 最新大厂面试专题

这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等

Lambda表达式入门(下篇),android开发网络框架_第7张图片

  • 对应导图的Android高级工程师进阶系统学习视频
    最近热门的,NDK,热修复,MVVM,源码等一系列系统学习视频都有!

Lambda表达式入门(下篇),android开发网络框架_第8张图片

,NDK,热修复,MVVM,源码等一系列系统学习视频都有!

[外链图片转存中…(img-4Zgm8v7c-1646557426414)]

下载方法:点赞+关注后 点击【Android高级工程师进阶学习】即可领取!

你可能感兴趣的:(程序员,架构,面试)