我想知道为什么ToDoubleBiFunction不扩展BiFunction。我是怎么做的:
import java.util.function.BiFunction;
public class Test {
public static void main(String[] args) {
MyToDoubleBiFunction<Integer, Integer> f = (a, b) -> a.doubleValue() + b.doubleValue();
System.out.println(f.apply(1, 2));
}
}
@FunctionalInterface
interface MyToDoubleBiFunction<T, U> extends BiFunction<T, U, Double> {
}
此代码有效并打印3.0
。
还有使用简单的applyAsDouble
方法而不是著名的apply
的意义是什么?
答案 0 :(得分:4)
BiFunction
的特定版本(例如ToDoubleBiFunction
的重点是避免auto(un)boxing-在这种情况下,将原始double
值自动装箱到/从java.lang.Double
个对象。
如果ToDoubleBiFunction
将扩展BiFunction<T, U, Double>
,则您将具有自动装箱功能。
请注意,您不能将基本类型用作Java中的类型参数,因此BiFunction<T, U, double>
(请注意double
是此处的基本类型)是不可能的。