Python Java 中等效的运算符模块,用于基本方法引用
Python operator module equivalent in Java for basic method references
截至 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")
。
如果这是Python,我会使用operator模块,但我不知道Java中是否有这样的东西。
那么 java.something
包中是否有任何静态方法可以进入 ?::?
部分相当于 ||
运算符?
为此,我使用 java.lang.Boolean.logicalOr(boolean, boolean)
方法。
所以在你的情况下你会使用:
calculator.apply(Boolean::logicalOr, true, false);
截至 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")
。
如果这是Python,我会使用operator模块,但我不知道Java中是否有这样的东西。
那么 java.something
包中是否有任何静态方法可以进入 ?::?
部分相当于 ||
运算符?
为此,我使用 java.lang.Boolean.logicalOr(boolean, boolean)
方法。
所以在你的情况下你会使用:
calculator.apply(Boolean::logicalOr, true, false);