在Java中创建function objects
(一个无状态对象导出一个适用于其他对象的方法)的最佳实践是什么?
答案 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)
好评后评论,这是一个答案: 传递函数没有简单/方便的方法。
大多数情况下,您将声明一个实现接口的内部类,例如Comparator
:
http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html
函数不能作为参数传递的事实产生了许多所谓的设计模式,在这些模式中传递声明具有这些函数的对象类/接口。
正如其他人所提到的,Java 8会让生活变得更容易。