【发布时间】:2017-07-17 08:44:49
【问题描述】:
我有这个枚举:
public enum Operator {
add("+", BigDecimal::add),
subtract("-", BigDecimal::subtract),
multiply("*", BigDecimal::multiply),
divide("/", BigDecimal::divide),
mod("%", BigDecimal::remainder);
Operator(final String symbol, final BinaryOperator<BigDecimal> operation) {
this.symbol = symbol;
this.operation = operation;
}
public BinaryOperator<BigDecimal> getOperation() {
return operation;
}
}
我想使用一些MathContext,在执行这样的操作时可以轻松做到这一点:
MathContext mc = MathContext.DECIMAL32;
BigDecimal t0 = new BigDecimal(100);
BigDecimal t1 = new BigDecimal(2);
BigDecimal result = t0.add(t1, mc);
但是,如果我想在枚举中使用对BinaryOperator 的引用,我看不到给它MathContext 的方法:
BigDecimal result = enum.getOperation().apply(t0, t1);
在文档和可用于应用的方法中,我看到了任何选项。
【问题讨论】:
-
创建一个使用具有您需要的签名的功能接口。
-
你也可以用辅助类来包装它,它会消耗 MathContext 和 Operator 枚举。
-
@JBNizet BiFunction 不起作用,因为他需要 TriFunction 之类的东西,因为有三个参数而不是两个(BinaryOperator 实现了 BiFunction,区别只是泛型参数都是相同的类型) .
-
@PascalSchneider 哦,是的,你是对的。谢谢。
标签: java enums java-8 bigdecimal binary-operators