package com.demo.service.function;
/**
* Created by admin on 2019/1/3.
*/
public class TestFunction {
public TestFunction() {
}
public TestFunction(String bookName) {
this.bookName = bookName;
}
private String bookName;
/**
* @Description: 书本过滤
* @Param:
* @return:
* @Date: 2019/1/3
*/
@FunctionalInterface
private interface BookFilter{
boolean match();
}
/**
* @Description: 书本过滤器生成类
* @Param:
* @return:
* @Date: 2019/1/3
*/
@FunctionalInterface
private interface BookFilterFactory{
BookFilter getBookFilter(String args);
}
private BookFilter getBookFilter(String bookName){
return () -> (bookName .equals("java"));
}
private void test1(BookFilterFactory factory){
BookFilter f = factory.getBookFilter(this.bookName);
System.out.println(f.match());
/**对应逻辑处理**/
}
private void test2(){
test1(this::getBookFilter);
}
public static void main(String[] args) {
TestFunction t = new TestFunction("java");
t.test2();
}
}
代码输出结果为:true
执行过程分析
1、新建TestFunction类,并为bookName设置初始值
2、调用test2()方法
3、test1方法需要一个函数式接口实现故传入函数getBookFilter
4、getBookFilter函数返回值同样需要一个函数式实现,这里返回一个Lambda表达式
总结:
对于使用@FunctionalInterface注解类的方法入参,我们只能传入该类的唯一抽象方法的实现。
注:
@FunctionalInterface注解的类只能有一个唯一抽象方法。