我需要一个像:
这样的界面interface Function<X,Y> {
Y eval(X obj);
}
Java中是否存在类似的内容,或者我是否需要定义自己的内容?
答案 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)。
但是,如果某个框架已经存在这样的界面,并且它的目的与你的相同,那么你可以使用它的定义,但要小心谨慎。