Python中的Python运算符模块等效于基本方法引用

时间:2016-06-28 05:47:41

标签: java java-8 method-reference

从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包中是否有任何静态方法可以放在?::?部分,该部分等同于||运算符?

1 个答案:

答案 0 :(得分:3)

我为此目的使用java.lang.Boolean.logicalOr(boolean, boolean)方法。

所以在你的情况下你会使用:

calculator.apply(Boolean::logicalOr, true, false);