【发布时间】:2010-03-11 19:22:39
【问题描述】:
我正在寻找一种优雅的方式来使用 Java 枚举中的值来表示操作或函数。我的猜测是,因为这是 Java,所以不会有一个很好的方法来做到这一点,但无论如何都是这样。我的枚举看起来像这样:
public enum Operator {
LT,
LTEQ,
EQEQ,
GT,
GTEQ,
NEQ;
...
}
其中LT 表示<(小于),LTEQ 表示<=(小于或等于)等等 - 你明白了。现在我想实际使用这些枚举值来应用运算符。我知道我可以只使用一大堆 if 语句来做到这一点,但那是丑陋的面向对象的方式,例如:
int a = ..., b = ...;
Operator foo = ...; // one of the enum values
if (foo == Operator.LT) {
return a < b;
}
else if (foo == Operator.LTEQ) {
return a <= b;
}
else if ... // etc
我想做的就是剪掉这个结构并使用某种一流的函数甚至多态性,但我不确定如何做。比如:
int a = ..., b = ...;
Operator foo = ...;
return foo.apply(a, b);
甚至
int a = ..., b = ...;
Operator foo = ...;
return a foo.convertToOperator() b;
但据我所见,我认为不可能返回运算符或函数(至少,在不使用某些 3rd-party 库的情况下是不可能的)。有什么建议吗?
【问题讨论】:
-
您希望通过这个实现什么目标? Java 中的操作符不太可能发生变化,如果这是您试图抽象出来的内容。
-
不,这不是我想要做的。