在Java中,创建“函数对象”(一种无状态对象,出口单个方法,该方法可用于其他对象)的最佳实践是什么?
看一下即将发布的Java 8功能接口是很有启发性的(链接)
Java 8类库中有一个新包,java.util.functions,其中包含几个新的函数接口。其中许多可以与Collections API一起使用。
如果您遵循此处展示的模式,您将拥有一个函数接口(支持一个方法的接口)和一个没有成员的实现。您的函数对象不应调用任何可能改变其状态(即表现出副作用)的方法参数上的方法。不幸的是,您无法强制执行这一点-您必须依靠惯例来实现。
Java是一种面向对象的编程语言,因此使用策略设计模式。
好的,在评论后,这里有一个答案:
没有一种简单/方便的方法来传递函数。
大多数情况下,您将声明一个实现接口的内部类,例如Comparator
:
http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html
函数无法作为参数传递的事实引发了许多所谓的设计模式,其中您会传递声称具有这些函数的对象类/接口。
正如其他人所提到的,使用Java 8会变得更加容易。
Comparator
接口来获得一些灵感:http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html。这是一个开放性问题。 - Christophe Roussy