行为参数化
行为参数化即将行为方法通过参数的形式传递给方法,来实现特定的功能。行为参数化是为了应对多变的需求,而降低代码的冗余而提出的。行为参数化是一种编程的思想,即它的实现时通过Java8提供的一些改变得以实现,在Java8之前,不能将方法作为参数传递给另一个方法。
行为参数化解决了多变的需求;
行为参数化实现了方法之间的解耦,功能之间更像是模块的方式,方便的增加和删除;
行为参数化降低代码的冗余,实现高效,便捷的开发。
lambda表达式
lambda表达式和行为参数化的关系,lambda表达式为行为参数化提供了更简洁,遍历的书写方式,对于行为参数化的实现,我们需要准备相应的条件,然后通过方法的传入来实现所需的功能,但是对于一个方法的实现,我们需要将整个方法的实现全部传递进去,使得代码的可观性降低,附带太多的冗余(相对lambda的写法),lambda表达式以更简洁的方式来实现前期的功能。
具体例子详解:
接口(行为接口):filterStudent
类:Students,FilterIdStudent(行为实现类),FilterStudent(业务实现类)
filterStudent:
Students:
FilterIdStudent:
FilterStudent
Run As Result:
FilterStudent的lambda的实现变动:
接口的变化:(filterStudent接口不需要,FilterIdStudent类也不需要了,Students类不变,不需要单独实现filterStudent2接口的具体类)
使用泛型,可以将对象的类型不局限于具体的Studnets.
FilterStudent类的变化:
Run as Result:
lambda表达式的理解
lambda可以理解为简洁地表示可传递的匿名函数的一种方式,没有名称,有参数列表,函数主体,返回类型,同时lambda表达式可以看做是接口的实现类。lambda表达式没有return语句,它根据语句的结果来推断出返回类型,语句没有结果的话,则是void。
格式:
lambda的使用条件:
lambda需要在函数式接口上使用Lambda表达式。什么样的接口是函数式接口?函数式接口需要满足接口满足以下条件:
⑴只定义一个抽象方法的接口,eg:
@FunctionalInterface注解的作用:
⑴该注解只能使用在有且仅有一个抽象方法的接口上;
⑵JDK8接口中的静态方法和默认方法,都不算是抽象方法。
⑶该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
JavaAPI已有的函数式接口:
⑴Predicate<T>接口,定义test抽象方法,该方法接受泛型T对象,返回boolean
⑵Consumer<T>接口,定基础java动画代码义accept抽象方法,接受泛型T对象,返回void
⑶Function<T,R>接口,定义apply抽象方法,接受泛型T对象,返回泛型R的对象;等等等
方法引用
方法引用可以看做是对某些Lambda的更近一步的简洁化,使的代码在特定的场合更具有可读性,“如果一个lambda表示的只是“直接调用这个方法”,则最好使用明后才能来调用它,而不是去描述如何调用它。”<--来自《Java8实战》。使用方式:目标引用放在分隔符::前,方法的名称放在后面。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/2857.html