<分区>
Java 7 是否支持函数式编程,或者我仍然需要使用 FunctionalJava 或其他库?我认为对此有支持,但没有找到太多关于它的信息。
<分区>
Java 7 是否支持函数式编程,或者我仍然需要使用 FunctionalJava 或其他库?我认为对此有支持,但没有找到太多关于它的信息。
最佳答案
这取决于您对函数式编程的定义。
无论如何,您的问题的答案是否定的。Lambda 应该在某一时刻出现在 Java7 中,但它们只会出现在 Java8 中。 看起来使用 Java8 您将能够 do a lot with the new lambda notation in conjunction with the regular JDK8 class libraries (特别是集合)在你需要像 FunctionalJava 这样的东西之前,但这取决于你想做多少。很多 OO 人会非常喜欢 FP 的味道——一个常见的例子是带有 map
、filter
等的集合。这本身无疑会插入 Java < em>更接近 FP - 可能只是 FP 就足够了。
问题是,即便如此,Java 中是否允许真正的(即使“不纯”)函数式编程?是,也不是。是,因为理论上任何具有词法闭包和 lambda 符号的语言都足够了。 不,因为 FP 受语言 Haskell
、F#
、OCAML
和 Scala
支持仍然不切实际。
一些例子:
if
、try
等需要返回一个值。其他语言如 Lisp/Scheme 或 Erlang 也被认为是函数式的;但在较不严格的意义上;要求 (1) 和 (2) 不适用,因为它们一开始就是动态类型。
然后可以说,Javascript 的功能与 Lisp(非纯动态函数式语言)差不多,因为 Javascript 一直具有 lambda 和一等函数。但是 Java 属于静态类型家族,并没有比 Javascript 更好,而且肯定不如现有的静态类型 FP 语言。
关于 (4. (Immutable/Side-effect free)),似乎在 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
关于java - Java 7 中的函数式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617705/