Avi*_*ohn 2 java lambda closures function-pointers java-8
有人告诉我tbat Java 8方法引用没有'true'函数指针那么强大.
怎么回事?方法引用与函数指针有何不同?
什么是currying?
Currying是从现有方法和参数构造新方法引用的能力.例如
// this is curried and implied in this method.
BiFunction<String, Integer> m = this::methodTwo;
// create a new curried method.
Function<String> m10 = t -> m.apply(t, 10);
Run Code Online (Sandbox Code Playgroud)
一个真实的例子是消费者
// curry this method so that when called it prints to System.out
Consumer<String> out = System.out::println;
Run Code Online (Sandbox Code Playgroud)
Java 8方法引用没有'true'函数指针那么强大.
Java 8方法引用实际上是对封装虚方法的对象的引用.这在某种程度上非常有效,但是你可能期望的一些基本的东西是做不到的.例如equals(),toString(),表达式检查不会做你所期望的.
方法引用与函数指针有何不同?
函数指针纯粹是对函数的引用.Java中的方法参考包括currying信息,例如,这是一种具有X,Y,Z作为已知参数的方法.
Java 8是否支持真正的闭包?
Java在功能方面往往极简主义,但您可以将其视为给定,而Java中的任何功能都不是"纯粹的".它有太多的向后兼容性问题需要处理,即使有纯粹的意愿,它也不可能.
我们还需要在能够在lambda中使用它之前声明变量final吗?
不,"有效最终"已经足够了.也就是说,如果你可以让它成为最终的,那就没关系.