从Java 8开始,存在方法引用。我有一个简单的接口,我想使用现有的(最好在java.something
包中)方法引用来实现。
public class Calculator {
private interface BinaryFunction<A, B, R> {
R apply(A a, B b);
}
private <A, B, R> R apply(BinaryFunction<A, B, R> binaryFunction, A a, B b) {
return binaryFunction.apply(a, b);
}
public static void main(String [] args) {
Calculator calculator = new Calculator();
calculator.apply((a, b) -> a + b, 1, 2); // 3
calculator.apply(Math::addExact, 1, 2); // 3
calculator.apply((a, b) -> a || b, true, false); // true
// calculator.apply(?::?, true, false); // true
}
}
Math::addExact
与+
不同,但它对我来说足够接近 - 我实际上更喜欢为我的目的抛出ArithmeticException("integer overflow")
。 < / p>
如果这是Python,我会使用operator模块,但我不知道Java中是否有这样的东西。
java.something
包中是否有任何静态方法可以放在?::?
部分,该部分等同于||
运算符?
答案 0 :(得分:3)
我为此目的使用java.lang.Boolean.logicalOr(boolean, boolean)
方法。
所以在你的情况下你会使用:
calculator.apply(Boolean::logicalOr, true, false);