在Java中导出函数对象的最佳实践是什么?

时间:2013-02-25 13:28:07

标签: java

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

4 个答案:

答案 0 :(得分:5)

查看forthcoming Java 8 functional interfaces

是有益的
  

Java 8类库有一个新的包java.util.functions   包含几个新的功能接口。其中许多都可以使用   使用Collections API。

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

Java8应该有lambdas来简化功能接口实现的创建。在Java8之前,您可以查看番石榴库提供的内容: Functional Explained

以下是文档的摘录:

  

番石榴提供两种基本功能"功能性#34;接口:       功能,具有单一方法B适用(A输入)。通常期望函数实例是引用透明的 - 没有副作用 - 并且与equals一致,即a.equals(b)意味着function.apply(a).equals(function.apply(b) )。       谓词,它有单个方法boolean apply(T输入)。谓词的实例通常预期是无副作用的并且与equals一致。

答案 3 :(得分:0)

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

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

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

正如其他人所提到的,Java 8会让生活变得更容易。