Предполагая, что все ваши случаи могут возвращать простое логическое значение, все шесть логических случаев могут быть переписаны в терминах LT и EQUALS, как показано ниже:
switch(operation) {
case EQUALS:
return isEquals();
case NOTEQUALS:
return !isEquals();
case LT:
return isLT();
case GT:
return !isLT() && !isEquals();
case GTE:
return !isLT();
case LTE:
reutrn isLT() || isEquals();
default:
break;
}
Для этого потребуется только написать логику для isLT () и isEquals (), которая включала бы тип данных при необходимости. Это устраняет значительное количество ненужного дублирования кода, но не жертвует большой разборчивостью.
Это можно комбинировать с указателями на функции, как уже предлагали Стивен Дойл и Рих, что полностью исключает оператор switch ().