一、定义编程函数
有时候我们在书写函数方法内部逻辑,同一个方法内,内部逻辑会进场变动,需要定义很多个方法来完成,所以我们可以通过定义Lambda函数来完成
1、比如我们写一个方法调用
public static void main(String[] args) {
UserDomain userDomain = new UserDomain();
//第一种调用方式
Object o1 = lambdaMethod(userDomain);
}
//调用函数
private static Object lambdaMethod(Object parame){
return parame.toString();
}
2、那么如果我们要把lambdaMethod里面包装起来,并且逻辑是可变的方式来实现。就可以通过Lambda来实现。
public static void main(String[] args) {
UserDomain userDomain = new UserDomain();
Object o = lambdaMethod(userDomain, item -> {
return item.toString();
});
}
//调用函数
private static Object lambdaMethod(Object parame,Function mapper){
return mapper.apply(parame);
}
3、当然这个函数Function是系统定义的。如果我们要自定义,那么应该怎么定义呢?
public static void main(String[] args) {
UserDomain userDomain = new UserDomain();
Object o2 = lambdaMethod2(userDomain, item -> {
return item.toString();
});
}
private static Object lambdaMethod2(Object parame,FunctionTest mapper){
return mapper.apply(parame);
}
//定义个函数
@FunctionalInterface
public interface FunctionTest<T, R> {
R apply(T t);
}
在Spring的案例中,可以参考这个方法
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping#detectHandlerMethods
里面就动态的定义了MethodIntrospector.selectMethods的逻辑