Lambda表达式

函数式接口

在了解Lambda表达式之前 , 要先了解什么是函数式接口 .
当一个接口只有一个必须重写的抽象方法时 , 该接口称为函数式接口 , 使用注解@FunctionalInterface 来对函数式接口作为规范和限制 , 比如当有两个必须重写的抽象方法时 , 添加该注解会自动报错提示 .
注意 : 继承自Object的抽象方法可以不重写 , 所以 , 函数式接口可以有多个抽象方法 , 但是必须有一个需要重写

Lambda表达式

Lambda表达式是对匿名内部类的简化 , 只有函数式接口的匿名内部类 , 才可以使用Lambda表达式及进行简化 , 对于普通接口或者类的匿名内部类 , 无法使用Lambda表达式 .

格式

( 参数 ) -> { 代码块 }
在这里插入图片描述

匿名内部类的省略

  • 参数类型可以省略 , 如果有多个参数 , 那么所有参数类型要么都省略 , 要么不省略
  • 当只有一个参数时 , () 可以省略 , a -> { }
  • 当代码块只有一句话时 , { }可以省略 , 注意去掉代码的分号 ( 不推荐 )

匿名内部类和Lambda表达的区别

  • 所需类型 : 匿名内部类可以是接口 , 抽象类 , 具体类 , 但是lambda表达式只能是函数式接口
  • 使用限制 : 匿名内部类可以有多个重写的抽象方法 , 函数式接口只能有一个必须重写的抽象方法
  • 实现原理 : 匿名内部类在编译之后 ,会产生一个单独的字节码文件 , lambda表达式在编译之后没有单独的字节码文件 , 对应的字节码文件在运行的时候动态生成
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值