6

在 Java中创建function objects(导出适用于其他对象的单个方法的无状态对象)的最佳实践是什么?

4

4 回答 4

5

看看即将到来的 Java 8 函数式接口很有启发性

Java 8 类库有一个新包 java.util.functions,其中包含几个新的函数接口。其中许多可以与 Collections API 一起使用。

如果您遵循此处展示的模式,您将拥有一个功能接口(一个支持一种方法的接口)和一个没有成员的实现。您的函数对象不应在方法参数上调用任何可能改变其状态(即表现出副作用)的方法。不幸的是,你不能强制执行——你必须依赖惯例。

于 2013-02-25T13:29:47.313 回答
3

Java 是一种面向对象的编程语言,所以使用策略设计模式。

于 2013-02-25T13:30:16.993 回答
2

Java8 应该有 lambdas 来简化函数式接口实现的创建。在 Java8 之前,您可以查看 guava 库提供的内容:Functional Explained

这是文档的摘录:

Guava 提供了两个基本的“函数式”接口: Function,它具有单一的方法 B apply(A input)。通常期望 Function 的实例是引用透明的——没有副作用——并且与 equals 一致,即 a.equals(b) 意味着 function.apply(a).equals(function.apply(b) )。谓词,具有单一方法 boolean apply(T input)。Predicate 的实例通常被认为是无副作用的并且与 equals 一致。

于 2013-02-25T13:34:39.697 回答
0

好的评论后,这是一个答案:没有简单/方便的方法来传递函数。

大多数时候,您将声明一个实现接口的内部类,例如Comparator: http: //docs.oracle.com/javase/6/docs/api/java/util/Comparator.html

函数不能作为参数传递的事实产生了许多所谓的设计模式,在这些模式中,您传递声明具有这些函数的对象类/接口。

正如其他人所提到的,使用 Java 8 生活会变得更轻松一些。

于 2013-02-25T13:44:45.013 回答