为什么ToDoubleBiFunction不扩展BiFunction

时间:2018-09-27 20:13:45

标签: java

我想知道为什么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的意义是什么?

1 个答案:

答案 0 :(得分:4)

BiFunction的特定版本(例如ToDoubleBiFunction的重点是避免auto(un)boxing-在这种情况下,将原始double值自动装箱到/从java.lang.Double个对象。

如果ToDoubleBiFunction将扩展BiFunction<T, U, Double>,则您将具有自动装箱功能。

请注意,您不能将基本类型用作Java中的类型参数,因此BiFunction<T, U, double>(请注意double是此处的基本类型)是不可能的。