【发布时间】:2014-03-03 21:35:32
【问题描述】:
由于期待迁移到 Java 8,我正在尝试以有利于使用 lambda 的方式编写代码。
我需要一个具有单一方法的功能接口,该方法采用某种类型的参数T 并返回void。这是java.util.function.Consumer的accept()方法的签名,当然我还不能用。
标准 Java 7(最好是 Java 6)API 中是否有其他接口可供我使用?我知道我可以创建自己的,但尤其是。在将此代码移植到 Java 8 之前,如果我可以使用标准 Java 6/7 API 中已经熟悉的标准接口,则可读性会更好。
到目前为止,我发现的最接近的东西是 com.google.common.base.Function<T,Void>,但是 (a) 它不是标准 Java API 的一部分,并且 (b) 它的文档说“函数的实例通常应该是引用透明的——不副作用”,这与我的预期用途相反(返回类型为Void)。
【问题讨论】:
-
您可以在任何有功能接口的地方使用 lambda,这是一个只有一种方法的接口。如果您想对代码进行建模以便更容易与 lambda 一起使用,请尽可能使用更多功能接口。
-
如果有这样的界面你就知道了。与一个名为
Consumer的新接口相比,一个你从未听说过的深奥的接口如何提高可读性,就像它匹配的 Java8 接口一样? -
我只是从 jdk8 的消费者复制粘贴代码(删除任何 Java-8 特定的注释)。当您迁移到 Java 8 时,您只需将匿名类替换为 lambda,并删除对您自己的 Consumer 类的导入。
-
如果您自己的
Consumer的单个方法与Java 8Consumer具有相同的名称和签名,您可以在过渡阶段使您的接口成为Consumer的子接口。
标签: java interface lambda java-8