Поскольку 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 as
IntBinaryOperator intBinaryOperator = (a, b) -> a + b;
System.out.println(intBinaryOperator.applyAsInt(10, 60));
Представляет операцию с двумя 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
, хотя в противном случае вы, вероятно, получите NullPointerException
.