标签:默认 不同 使用 ati jdk8 表达式 复制粘贴 上下文 XML
个人看法:
lambda表达式在《Java8实战》中想表达的是行为参数化,即从参数传递代码,但实际上还是传递的对象,从感官上来说确实是直接传递的代码,代码更加直观了,毕竟很多人不想因为一行有效代码,去编写一个类,尽管可以使用匿名内部类,但是匿名内部类可以更加简洁,那就是lambda表达式。
lambda表达式可以粗略看做匿名内部类的语法糖,为了让编码更简洁、直观,由于它简洁到方法名、返回值类型、参数类型都可以没有的语法特点,所以需要一个接口来提供上下文的推断,满足Java能真的认识这串代码入参类型和返回值类型,可结合模板方法模式精简一些重复的“环绕代码”,官方已定义了常用的接口,这些常用的接口成了stream流中重要的承载lambda表达式代码的载体,总之stream流操作是高效代码必不可少的一块,而为此学习简洁的lambda表达式也是有必要的。
一个只含有一个抽象方法的接口,称之为函数式接口,只含有一个抽象方法,不代表不能有其他的非抽象方法,在jdk8中已经可以给接口添加多个静态和默认方法。
一个测试类,含有一个test000方法,和test111方法
结果
可以看出,lambda表达式从观感上能直接让我们看到有效代码,确实是很简洁。
有的人说:"这里使用了模板方法模式,完全可以不用这个模式,直接就写死就行,同样能出结果,连接口都不用,很省。“
就像这样
确实,但是这个例子是很简单的,如果有很多个这样的就只有判断条件不同的方法,那写死不就要复制粘贴很多个方法了吗,而且复制粘贴多少不太安全。
再者说,lambda表达式单独并不强大,主要是stream很强大,不使用stream,不太恰当的相当于别人用SpringBoot开发,而你用SSM写,而lambda就充当的是SpringBoot的application.yml,可以进行简洁的配置,不再需要那么多的SSM中需要的xml配置文件,因为SpringBoot帮你做好了一些事情。
一个含有一个抽象方法的接口,该抽象方法接受两个参数
测试类添加test333方法
分别调用两个方法
可以看出
1、对于一个参数的抽象方法,lambda表达式可以不写括号,而对于两个参数的,则需要括号
2、无论参数有几个,都可以不写类型
3、如果方法体只有一条语句,可以不加大括号,它会自动将该条语句结果返回,多于一条,则需要加大括号且加;和return
标签:默认 不同 使用 ati jdk8 表达式 复制粘贴 上下文 XML
原文地址:https://www.cnblogs.com/darkclouds/p/12076489.html