Java:通用功能X-> Y接口

时间:2010-10-11 15:01:49

标签: java function interface

我需要一个像:

这样的界面
interface Function<X,Y> {
    Y eval(X obj);
}

Java中是否存在类似的内容,或者我是否需要定义自己的内容?

5 个答案:

答案 0 :(得分:13)

查看番石榴,它有一个Function interface

public interface Function<F, T> {
  /**
   * Applies the function to an object of type {@code F}, resulting in an object of     type {@code T}.
   * Note that types {@code F} and {@code T} may or may not be the same.
   *
   * @param from the source object
   * @return the resulting object
   */
  T apply(@Nullable F from);

  /**
   * Indicates whether some other object is equal to this {@code Function}. This     method can return
   * {@code true} <i>only</i> if the specified object is also a {@code Function} and, for every
   * input object {@code o}, it returns exactly the same value. Thus, {@code
   * function1.equals(function2)} implies that either {@code function1.apply(o)} and {@code
   * function2.apply(o)} are both null, or {@code function1.apply(o).equals(function2.apply(o))}.
   *
   * <p>Note that it is always safe <i>not</i> to override {@link Object#equals}.
   */
  boolean equals(@Nullable Object obj);
 }

答案 1 :(得分:6)

不幸的是,核心Java库中没有这样的东西。因此,许多库定义了自己的类似功能的接口。如果您恰好使用了这样的库,则可以重新使用它所使用的功能。

答案 2 :(得分:2)

您可以使用具有有用功能的Apache Commons Functor等库,例如:

<强> UnaryFunction

T evaluate(A obj);

<强> BinaryFunction

T evaluate(L left, R right); 

答案 3 :(得分:2)

这样的内置界面虽然它只与Java 8以后兼容。你可以找到它here

来自Javadocs:

  

public interface Function<T,R>

     

表示接受一个参数并生成结果的函数。

     

这是一个功能界面,其功能方法是apply(Object)

     

类型参数:
      T - 函数输入的类型
      R - 函数结果的类型

答案 4 :(得分:0)

事实上,考虑到你的目的是你的,而不是Sun / Oracle的目的,你应该定义你自己的界面(因为它定义了你希望你的接口实现者的合同到fullfil)。

但是,如果某个框架已经存在这样的界面,并且它的目的与你的相同,那么你可以使用它的定义,但要小心谨慎。