Я ищу элегантный способ использования значений в перечислении Java для представления операций или функций. Я предполагаю, что, поскольку это Java, просто не будет хорошего способа сделать это, но в любом случае. Мой enum выглядит примерно так:
public enum Operator {
LT,
LTEQ,
EQEQ,
GT,
GTEQ,
NEQ;
...
}
, где LT
означает <
(меньше чем), LTEQ
означает <=
(меньше или равно) и т. Д. - вы поймете идею. Теперь я хочу использовать эти значения перечисления для применения оператора. Я знаю, что мог бы сделать это, просто используя целую кучу операторов if, но это уродливо, ОО, например ::100100
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;
Но, насколько я видел, я не думаю, что можно вернуть оператор или функцию (по крайней мере, без использования сторонней библиотеки). Есть предложения?