为什么lambda表达式不能处理递归呢?因为lambda表达式本身就是匿名函数的写法,当函数名省略了之后,自己调用自己就比较困难了。
可以利用反射机制获取Method对象递归调用自己,但是比较繁琐完全没必要。
当我们既要用递归来解决问题又不想写一个单独的方法时,我们可以用函数式编程,但lambda表达式实现递归比较麻烦,因此我们干脆不用lambda表达式了,而用lambda表达式的退化版-匿名内部类。
如下代码所示,使用匿名内部类计算阶乘。
java.util.function.Function<Integer,Integer> func = new java.util.function.Function<Integer, Integer>(){
@Override
public Integer apply(Integer a) {
if(a==1){
return 1;
}
return a*apply(a-1);
}
};
System.out.println(func.apply(5));