因为BinaryOperator 可以处理单一类型的操作数和结果。即BinaryOperator<T>。
BinaryOperator 不是 BinaryFunction 的子代吗?
是的。 BinaryOperator 执行 extends BiFunction。
但请注意文档状态(格式化我的):
这是BiFunction 的特化,适用于
操作数和结果都是同一类型。
完整的表示如下:
BinaryOperator<T> extends BiFunction<T,T,T>
因此您的代码将适用于
BinaryOperator<Integer> binaryOperator = (a, b) -> a + b;
System.out.println(binaryOperator.apply(10, 60));
如果您要处理当前示例中的两个原始整数(添加我使用的两个整数),您可以将IntBinaryOperator FunctionalInterface 用作
IntBinaryOperator intBinaryOperator = (a, b) -> a + b;
System.out.println(intBinaryOperator.applyAsInt(10, 60));
表示对两个int 值操作数的操作并产生
一个 int 值的结果。这是原始类型特化
BinaryOperator 为int。
我用的是 Integer,我还能用 IntBinaryOperator
是的,你仍然可以使用它但是注意IntBinaryOperator的表示
Integer first = 10;
Integer second = 60;
IntBinaryOperator intBinaryOperator = new IntBinaryOperator() {
@Override
public int applyAsInt(int a, int b) {
return Integer.sum(a, b);
}
};
Integer result = intBinaryOperator.applyAsInt(first, second);
会导致您拆箱 first 和second 到基元,然后自动装箱 总和作为result 类型Integer 的输出.
注意:注意在 Integer 中使用 null-safe 值,否则你可能会得到一个 @ 987654343@.