gpt4 book ai didi

java - 我应该使用哪个 FunctionalInterface?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:22 26 4
gpt4 key购买 nike

我正在学习将一些 lambda 表示形式写成 FunctionalInterface .所以,要添加我使用的两个整数:

BiFunction<Integer, Integer, Integer> biFunction = (a, b) -> a + b;
System.out.println(biFunction.apply(10, 60));

给我输出 70。但是如果我这样写

BinaryOperator<Integer, Integer, Integer> binaryOperator = (a, b) -> a + b;

我收到一条错误消息

Wrong number of type arguments: 3; required: 1

BinaryOperator 不是 BinaryFunction 的子项吗?我该如何改进它?

最佳答案

BinaryOperator

BinaryOperator适用于单一类型的操作数和结果。即 BinaryOperator<T> .

Isn't BinaryOperator a child of BinaryFunction?

是的。 BinaryOperatorextends BiFunction .但请注意文档状态(格式化我的):

This is a specialization of BiFunction for the case where the operands and the result are all of the same type.

完整的表示如下:

BinaryOperator<T> extends BiFunction<T,T,T>

因此您的代码将适用于

BinaryOperator<Integer> binaryOperator = (a, b) -> a + b;
System.out.println(binaryOperator.apply(10, 60));

IntBinaryOperator

如果您应该像当前示例中那样处理两个原始整数(添加我使用的两个整数),您可以使用 IntBinaryOperator功能接口(interface)作为

IntBinaryOperator intBinaryOperator = (a, b) -> a + b;
System.out.println(intBinaryOperator.applyAsInt(10, 60));

Represents an operation upon two int-valued operands and producing an int-valued result. This is the primitive type specialization of BinaryOperator for int.


I am using Integer, can I still use 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);

会招致您拆箱的开销firstsecond到基元,然后自动装箱总和作为输出到result类型 Integer .

注意:小心使用空安全值 Integer不过,否则你可能会得到一个 NullPointerException .

关于java - 我应该使用哪个 FunctionalInterface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53893602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com