Dea*_*ock 6 java functional-programming
Java 7是否具有函数式编程支持,或者我仍然需要使用FunctionalJava或其他lib?我以为是支持这个,但没有找到太多关于它的信息.
Fai*_*aiz 12
这取决于您对函数式编程的定义.
在任何情况下,你的问题的答案都是否定的.Namdas应该一度出现在Java7中,但它们只出现在Java8中.它看起来像Java8你就可以做很多新的λ符号结合常规JDK8类库 (特别是集合),你需要像以前FunctionalJava,但那种取决于你想要多少做.很多OO民间的会很幸福只是一个FP的味道-一个常见的例子是收藏用map,filter等这本身无疑将移动Java的接近,以FP -并且可能只是FP够你.
即使在那时,问题是允许在Java中进行真正的(即使是"不纯的")函数式编程?是的,编号是,因为词法闭包和一个lambda符号的任何语言在理论上是不够的. 没有,因为FP由语言支持Haskell,F#,OCAML和Scala仍然是不切实际的.
一些例子:
if,try等需要返回一个值.其他语言如Lisp/Scheme或Erlang也被认为是功能性的; 但从严格意义上讲; 要求(1)和(2)不适用,因为它们是动态键入的.
可以说,Javascript与Lisp(不纯的动态函数语言)一样功能,因为Javascript总是有lambdas和一流函数.但Java在静态类型的家庭中,并没有比Javascript更好(当然不如现有的静态类型FP语言).
关于(4.(不可变/无副作用)),似乎在JDK8中,现有的可变类将使用lambda消耗方法进行改装,因此(至少在一段时间内)会限制你可以使用的方法在Java8中采用FP范例.
我发现这些链接非常有用 - 我没有跟进一段时间,所以我不确定它们是否是关于此的最佳/最新信息.但值得一读:
http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-final.html
http://cr.openjdk.java.net/~briangoetz/lambda/collections-overview.html