@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类型,因此只能访问外而不能修改。
2、访问静态变量和成员变量
在Lambda表达式内部,对静态变量和成员变量可读可写。
内置函数式接口
小伙伴们有没有发现,如果使用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个参数,无返回值。调用方要传入值,而不需要返回,形象比喻成消费型
这个就是对传入num参数值,进行相关的处理(消费)。到底进行处理,具体就在
(num) -> System.out.println(“消费了” + num)
上面的代码中,是一个典型的1个参数,无返回值的消费;如果没有内置的函数接口,那我们就需要自己定义一个,如:
interface MyConsumer{
void doFunction(T t);
}
我们发现和内置函数接口,没有什么区别,就是接口名和方法名称不一样而已,其实本质是一样的,这就是为什么Java会提供一些内置的函数,这样可以减少大量的代码。
2、Supplier供给型接口
接口中的方法 T get(),无参数,有返回值;不需要对方给参数,而是一直返回给对方,形象定义为供给型接口
上面代码就是返回一个新的实体对象。
3、Function<T, R>函数式接口
接口中的方法 R apply (T t),有参数,有返回值;典型的函数,所以形象比喻成函数型接口
接口实现转换成大写的字符。
4、Predicate断言型接口
接口中方法 boolean test(T t),有参数,返回boolean,是一个条件检查式方法,比喻成断言型接口
内置的函数接口,大大的提高开发的效率,减少了开发代码
方法引用
方法引用是Lambda表达式的一个简化写法,其语法结构为:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
文末
那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。点击我的GitHub下述资料免费领取
Android希望=技能+面试
-
技能
-
面试技巧+面试题
ndroid希望=技能+面试** -
技能
[外链图片转存中…(img-HwAi6ykK-1710668016694)] -
面试技巧+面试题