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

Mat*_*nry 6 java lambda interface java-8

期待迁移到Java 8,我试图以有利于使用lambda的方式编写代码.

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

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

到目前为止我发现的最接近的是com.google.common.base.Function<T,Void>,但是(a)它不是标准Java API的一部分,(b)它的文档说"功能的实例通常被认为是引用透明的 - 没有副作用",这是与我的预期用途相反(具有Void返回类型).

Cha*_*lie 10

您可以创建自己的界面:

public interface Invokable <T>{
    public void invoke(T param);
}
Run Code Online (Sandbox Code Playgroud)

或者,如建议的那样,您可以使用与Java 8相同的接口Consumer.源代码包含在Java 8 JDK Early Access下载中,此处删除了所有注释和注释:

public interface Consumer<T>{
    void accept(T t)
    default Consumer<T> andThen(Consumer<? super T> after)
}
Run Code Online (Sandbox Code Playgroud)

  • 更好的是将其命名为"Consumer"并将方法命名为"accept",然后当Java 8出现时,您可以摆脱它们.(PS你的`Invoke`方法应命名为`invoke`.) (5认同)