Action / Func类的事实标准是什么?

时间:2010-11-24 05:00:34

标签: java

因为JDK不包含它们,所以有大量第三方库包含Action或Func接口,如下所示:

public interface Action<T> {
  void doSomething(T item);
}

public interface Func<TResult, TInput> {
  TResult doSomething(TInput input);
}

这是事实上或最常用的标准是什么?

2 个答案:

答案 0 :(得分:3)

您可以使用Runnable(无效)或Callable(返回值)。但正如您所说,软件包通常会创建自己的软件包。部分原因是名称比runcall更有意义。您应该注意到Java没有C#样式的委托,也没有办法在方法和接口实例之间进行隐式转换。

请注意,上述两个接口都不允许使用参数。如果需要,您将需要一个不同的解决方案。

编辑:过去我使用过Apache Functor,它有一些接口(例如UnaryProcedureUnaryFunction用于问题中的接口)。但是,我仍然会考虑创建自己的,特别是如果您不需要Functor中的任何其他内容(例如algorithmadapter

答案 1 :(得分:1)

虽然我不知道任何与您的Action<T>签名匹配的界面(可能部分是因为此类签名要求Action的实例产生副作用),但Guava有{ {3}}与第二个签名匹配的接口,以及许多CollectionIterable相关实用程序,这些实用程序使用Function来执行延迟映射(在Guava中称为transform )。它也只是一个非常棒的通用Java库。