Java8新特性 - Lambda表达式
生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德分享学习心得,欢迎指正,大家一起学习成长!
文章插图
简介Lambda 表达式(lambda expression)是一个匿名函数 , Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),即没有函数名的函数 。Lambda表达式可以表示闭包(注意和数学传统意义上的不同) 。这是来自百度百科对lambda的介绍,实际上lambda就是简化了匿名函数的编写,只需一行代码就能代替繁杂的代码 。lambda主要是可以非常简洁的形式调用我们的匿名函数接口 。
简单例子首先声明一个接口,并且编写实现类实现这个接口
// UserServicepublic interface UserService { void add();}// UserServiceImplpublic class UserServiceImpl implements UserService { @Override public void add() { System.out.println("UserServiceImpl --- add"); }}一般来说是通过new实现类从而拿到实现中的add方法 , 如果通过new接口类就需要使用匿名内部类的形式调用接口 。IDEA会提示使用lambda表达式 。
文章插图
如下代码可以看一下对比 。
public static void main(String[] args) { UserService userService = new UserServiceImpl(); userService.add(); UserService user = new UserService() { @Override public void add() { // 匿名内部接口业务逻辑 System.out.println("匿名内部接口业务逻辑"); } }; // Lamdba表达式 UserService user2 = () -> System.out.println("匿名内部接口业务逻辑"); user2.add();}Lambda表达式的规范Java中的Lambda表达式的规范,必须是为函数接口 。
使用函数式接口【【Java8新特性】- Lambda表达式】使用Lambda表达式依赖于函数式接口:1、使用@FunctionalInterface注解来声明函数接口2、在这个函数接口中只能有一个抽象方法3、在函数接口中可以定义object类中的方法4、可以有静态方法*函数式接口(Functional Interface) 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口 。更多函数式接口可以查看菜鸟联盟:https://www.runoob.com/java/java8-functional-interfaces.html
函数式接口的定义通过@FunctionalInterface注解声明接口类 , 在java中也有许多内置的函数接口 , 详情看菜鸟联盟 。
@FunctionalInterface // 声明函数式接口public interface UserService { void add(); String toString(); // Object类中的方法 static void hello() { // 静态方法 System.out.println("hello"); }}Lambda表达式的基础语法表达式格式(参数) -> {方法体}
格式说明():存放参数,留空就代表没有参数 。函数接口的参数列表,不需要写类型 , 需要定义参数名称 。->:是新引入的语法格式 , 代表指向动作 。{}:方法体
无参方法调用在接口类中声明一个无参的抽象方法 , 通过lambda表达式来完成调用 。()不需要存放参数,最后将会返回一个实现类对象 。在通过调用对象的get方法 。
// 匿名内部接口业务逻辑UserService user2 = () -> System.out.println("匿名内部接口业务逻辑");user2.get();更加简便的写法
((UserService)() -> System.out.println("匿名内部接口业务逻辑")).get();含参数方法调用在MathService定义一个含有参数的抽象方法,原本的方式通过匿名内部接口 。可以通过使用lambda表达式更加简便,并且可以省去{},也不需要return 。
推荐阅读
- 支付宝蚂蚁庄园11月3日答案是什么
- 摩尔庄园11.2神奇密码是多少
- vivoiqooz5x手机参数_vivoiqooz5x参数消息
- 带样式 JSP实现登录删除添加星座等
- 原神七圣召唤什么时候上线
- 微信的说说怎么发文字(发美景说说配文字)
- 【疫情动态条形图】用Python开发全球疫情排名动态条形图bar_chart_race
- 【论文翻译】KLMo: Knowledge Graph Enhanced Pretrained Language Model with Fine-Grained Relationships
- 【Java8新特性】- 接口中默认方法修饰为普通方法
- NFC 怎么使用(nfc具体使用方法)