Lambda表达式的使用

Lambda表达式

格式: (形式参数) -> {代码块}
形式参数: 如果由多个形式参数, 用逗号隔开, 没有则留空
->: 固定写法, 代表指向动作
代码块: 具体要做的事情, 方法体内容```

使用前提:
Ⅰ.有一个接口
Ⅱ.有且仅有一个抽象方法

//Lambda表达式测试, 使用前提有一个接口, 接口有且仅有一个抽象方法   
//创建一个方法, 方法的形式参数为接口
//		1.主方法调用吃东西方法, 传入学生
		Animal a = new Student();
		eat(a);	
//		2.匿名内部类方式
		eat(new Student() {
			public void eat() {
				System.out.println("学生会吃东西..");
			}
		});
//		3.Lambda表示式
		eat(()->{
			System.out.println("学生会吃东西....");
		});

Lambda表达式的省略模式

  1. 参数类型可以省略, 但是多个参数的情况下, 不能只省略一个
  2. 如果参数有且仅有一个, 那么小括号可以省略
  3. 如果代码块的语句只有一条, 可以省略大括号和分号, 甚至是return
//		1.完整方式书写
		useAdd((int x, int y) -> {
			return x + y;
		});
//		2.省略参数
		useAdd((x,y) -> {
			return x + y;
		});
//		3.参数有两个, 省略大括号和分号和return
		useAdd((x,y) -> x + y);
//		4.参数有一个, 可以省略小括号, 大括号, 和分号 
		useFlying(s -> System.out.println(s));

注意事项

  • 使用Lambda必须要有接口, 并且接口中有且仅有一个抽象方法
  • 必须有上下文环境, 才能推导出Lambda对应的接口
//根据局部变量的赋值, 得知Lambda对应的接口
Runnable r = () -> System.out.println("Lambda表达式");
//根据调用方法的参数, 得知Lambada对应的接口
new Thread(() -> System.out.println("Lambda表达式")).start();

Lambda表达式和匿名内部类的区别
所需类型不同

  • 匿名内部类: 可以是接口, 抽象类, 具体的类
  • Lambda: 只能是接口

使用限制不同

  • 匿名内部类: 接口中多个抽象方法都可以实现
  • Lambda: 接口中只有一个抽象方法才可以实现

实现原理不同

  • 匿名内部类: 编译之后, 产生一个单独的.class文件
  • Lambda: 编译之后, 没有产生单独的.class文件, 对应的字节码文件会在编译的时候动态生成
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值