Прежде всего, я бы переместил метод «содержащий» (или его эквивалент) в само перечисление, определив метод isModifier.
public static enum DataValueModifier {
...
public boolean isModifier( String modifierString )
{
return modifierString != null && value.equals(modifierString);
}
}
Затем ваш код выглядит следующим образом:
if (DataValueModifier.EQUAL.isModifier(dataValue))
{
//...
}
Но, что более важно, почему вы сначала используете dataValue вместо enum?Если вы получаете ввод из командной строки или что-то еще или анализируете строковое уравнение, а затем вам нужно выяснить выражение, я думаю, я понимаю.Но если у вас есть контроль над кодом, тогда вы должны просто начать с enum, и вы сможете сказать:
if ( dataValueEnum == DataValueModifier.EQUAL ) {
{
//...
}
Я бы также подумал о добавлении статического метода в enum, который преобразует данную строкук правильному значению перечисления.Возможно, это не так эффективно, но если вы действительно не заботитесь об эффективности, это сделает ваш код намного чище.Поэтому добавьте этот метод в ваше перечисление:
public static DataValueModifier toDataValueModifier( String dataValue ) {
if( EQUAL.isModifier( dataValue ) {
return EQUAL;
} else if( GREATER_THAN.isModifier( dataValue ) {
return GREATER_THAN;
} else if...
// Do this for all possible values
} else {
return UNKNOWN;
// Also, add an UNKNOWN to your list of enum values.
}
}
Методы isModifier
и toDataValueModifier
могут добавить немного уродливого кода к вашему перечислению DataValueModifier, но весь ваш другой код будет отлично выглядеть.Теперь вы можете сделать что-то вроде этого:
DataValueModifier dataValueEnum = DataValueModifier.toDataValueModifier(dataValue);
if (dataValueEnum == DataValueModifier.EQUAL) {
...
}
или даже
switch( DataValueModifier.toDataValueModifier(dataValue) ) {
case EQUAL:
// ...
break;
case GREATER_THAN:
// ...
break;
case GREATER_EQUAL:
// ...
break;
// ... define all the cases you want
case UNKNOWN:
default:
// ...
}