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

在Java中导出函数对象的最佳实践是什么?,java,Java,在Java中创建函数对象(一个无状态对象,它导出一个在其他对象上工作的方法)的最佳实践是什么 看看这本书很有启发性 Java8类库有一个新的包Java.util.functions,它 包含几个新的功能接口。其中许多都可以使用 使用集合API 如果您遵循这里展示的模式,您将拥有一个功能接口(支持一种方法的接口)和一个没有成员的实现。您的函数对象不应该对可能改变其状态(即显示副作用)的方法参数调用任何方法。不幸的是,您不能强制执行这一点-您必须依靠约定来实现这一点。Java是一种面向对象的编程语言

在Java中创建
函数对象
(一个无状态对象,它导出一个在其他对象上工作的方法)的最佳实践是什么

看看这本书很有启发性

Java8类库有一个新的包Java.util.functions,它 包含几个新的功能接口。其中许多都可以使用 使用集合API


如果您遵循这里展示的模式,您将拥有一个功能接口(支持一种方法的接口)和一个没有成员的实现。您的函数对象不应该对可能改变其状态(即显示副作用)的方法参数调用任何方法。不幸的是,您不能强制执行这一点-您必须依靠约定来实现这一点。

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

Java8应该有lambdas,以简化功能接口实现的创建。在Java8之前,您可以看看guava库提供了什么:

以下是文件摘录:

Guava提供了两个基本的“功能”接口: 函数,其中有一个方法B应用(A输入)。函数的实例通常被期望是引用透明的——没有副作用——并且与equals一致,也就是说,a.equals(b)意味着Function.apply(a).equals(Function.apply(b))。 谓词,它有一个布尔apply方法(T input)。谓词实例通常被认为是无副作用的,并且与equals一致


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

大多数情况下,您将声明一个内部类,该类实现了一个接口,例如
比较器

函数不能作为参数传递这一事实导致了许多所谓的设计模式,在这些模式中,可以传递声明拥有这些函数的对象、类/接口


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

您可以通过查看
Comparator
接口获得一些灵感:。这是一个开放式的问题。函数式语言是否可以实现这一点?我相信实现不变性的语言可以实现这一点。也许C++和它的强大的const语义,虽然我宁愿不引用这个!虽然策略在这里起作用,但没有必要像功能对象那样,让策略对象只实现一种方法