是否有一个Java-8之前的功能接口';它是java.util.function.Consumer的替代品<;T>;?

是否有一个Java-8之前的功能接口';它是java.util.function.Consumer的替代品<;T>;?,java,interface,lambda,java-8,Java,Interface,Lambda,Java 8,为了更好地使用Java8,我正在尝试以一种有利于使用lambdas的方式编写代码 我需要一个带有单个方法的函数接口,该方法接受某种类型的参数T,并返回void。这是的accept()方法的签名,但我当然还不能使用它 在标准Java7(最好是Java6)API中是否有另一个我可以使用的接口?我知道我可以创建自己的,但特别是在将此代码移植到Java 8之前,如果我可以使用标准Java 6/7 API中已经熟悉的标准接口,则可读性更好 到目前为止,我发现的最接近的东西是,但是(a)它不是标准Java

为了更好地使用Java8,我正在尝试以一种有利于使用lambdas的方式编写代码

我需要一个带有单个方法的函数接口,该方法接受某种类型的参数
T
,并返回
void
。这是的
accept()
方法的签名,但我当然还不能使用它

在标准Java7(最好是Java6)API中是否有另一个我可以使用的接口?我知道我可以创建自己的,但特别是在将此代码移植到Java 8之前,如果我可以使用标准Java 6/7 API中已经熟悉的标准接口,则可读性更好


到目前为止,我发现的最接近的东西是,但是(a)它不是标准Java API的一部分,(b)它的文档说“函数的实例通常是引用透明的——没有副作用”,这与我的预期用途相反(使用
Void
返回类型)。

您可以创建自己的接口:

public interface Invokable <T>{
    public void invoke(T param);
}

哈,找到了!查看JavaEE7API:接口应该是您所要寻找的。

在任何有功能接口的地方都可以使用lambdas,这是一个只有一种方法的接口。如果您想对代码进行建模,以便更易于与lambdas一起使用,请尽可能使用更多的功能接口。如果有这样的接口,您就知道了。与名为
Consumer
的新接口相比,一个如此深奥以至于您从未听说过的接口如何能够提高可读性,就像它所匹配的Java8接口一样?我只想从jdk8的Consumer复制粘贴代码(删除任何Java-8特定的注释)。当您移动到Java 8时,您只需要用lambdas替换匿名类,并删除对您自己的使用者类的导入。如果您自己的
使用者
的单个方法与Java 8
使用者
具有相同的名称和签名,则可以在转换期间将您的接口作为
使用者
的子接口更好的方法是将它命名为
Consumer
,并将方法命名为
accept
,然后当Java8出现时,您就可以摆脱您的方法了。(另外,你的
Invoke
方法应该命名为
Invoke
)感谢案例修复,我在C#=(@Holger的评论是正确的,正如@jpvee的答案晦涩难懂所说明的那样。)看来现在最好只克隆
消费者
,在升级到Java8后,将其替换为库存版本。这家伙应该得到一杯啤酒!感谢您提醒我们简单的java概念。由于我的答案被指责过于模糊,我应该添加
MessageHandler。完整的
是JavaSE 7和JavaEE 7 API中唯一一个功能强大的接口(相信我,我检查过!),即,定义一个方法,该方法接受一个泛型参数并返回
void
(并且不抛出选中的异常)。不过,我确实同意,使用此界面而不是
消费者
界面是否是一个好主意值得怀疑:)
public interface Consumer<T>{
    void accept(T t)
    default Consumer<T> andThen(Consumer<? super T> after)
}