因为JDK不包含它们,所以有大量第三方库包含Action或Func接口,如下所示:
public interface Action<T> {
void doSomething(T item);
}
public interface Func<TResult, TInput> {
TResult doSomething(TInput input);
}
这是事实上或最常用的标准是什么?
答案 0 :(得分:3)
您可以使用Runnable
(无效)或Callable
(返回值)。但正如您所说,软件包通常会创建自己的软件包。部分原因是名称比run
或call
更有意义。您应该注意到Java没有C#样式的委托,也没有办法在方法和接口实例之间进行隐式转换。
请注意,上述两个接口都不允许使用参数。如果需要,您将需要一个不同的解决方案。
编辑:过去我使用过Apache Functor,它有一些接口(例如UnaryProcedure
和UnaryFunction
用于问题中的接口)。但是,我仍然会考虑创建自己的,特别是如果您不需要Functor中的任何其他内容(例如algorithm或adapter)
答案 1 :(得分:1)
虽然我不知道任何与您的Action<T>
签名匹配的界面(可能部分是因为此类签名要求Action
的实例产生副作用),但Guava有{ {3}}与第二个签名匹配的接口,以及许多Collection
和Iterable
相关实用程序,这些实用程序使用Function
来执行延迟映射(在Guava中称为transform
)。它也只是一个非常棒的通用Java库。