我想知道为什么方法引用和lambda无法识别为功能。为什么我需要写
Function<Integer, Integer> fun1 = i -> i+2;
Function<Integer, Integer> fun2 = i -> i*i;
fun1.compose(fun2).apply(4);
代替
((Integer i) -> i*2).compose((Integer i) -> i+2).apply(4)
Lambda表达式没有内部类型。以下是错误:
Object lambda = x -> x;
Lambda表达式是poly表达式,是类型取决于其上下文的表达式。特别是,lambda表达式从其目标类型派生其类型,该目标类型必须是功能接口-具有单个(非Object
)抽象方法的接口。相同的lambda表达式可以具有多种类型,具体取决于其目标类型:
Predicate<String> isEmpty = s -> s.isEmpty();
Function<String, Boolean> isEmpty = s -> s.isEmpty();
接口Function
不是语言的一部分,也不具有任何魔术特性;它只是一个普通的功能接口,就像Runnable
orPredicate
或or一样Comparable
。编译器没有理由没有猜测到您的意思是要针对的lambda,Function
而不是其他类型。
此外,您无需成为lambda即可实现Function
;您可以是命名类或匿名类。Lambda(和方法ref)是指定功能接口实例的语法紧凑方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句