En primer lugar, me mudaría la "contiene "método (o su equivalente) a la enumeración misma mediante la definición de un método isModifier.
public static enum DataValueModifier {
...
public boolean isModifier(String modifierString)
{
return modifierString != null && value.equals(modifierString);
}
}
A continuación, el código es el siguiente lugar:
if (DataValueModifier.EQUAL.isModifier(dataValue))
{
//...
}
Pero, más importante aún, ¿por qué está usando DataValue en lugar de la enumeración en el primer lugar? Si obtiene entrada de línea de comando o algo, o analiza una ecuación de cadena y luego necesita descubrir la expresión, supongo que lo entiendo. Pero si usted tiene el control del código a continuación, sólo debe comenzar con la enumeración y podrás ser capaz de decir
if (dataValueEnum == DataValueModifier.EQUAL) {
{
//...
}
También me gustaría considerar la adición de un método estático de la enumeración que convierte una cadena dada a la valor de enum correcto No es tan eficiente, tal vez, pero a menos que realmente te importe la eficiencia, hará que tu código sea mucho más limpio. Así que añadir este método para su enumeración:
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.
}
}
El isModifier
y los métodos toDataValueModifier
podría añadir un poco de código feo a su enumeración DataValueModifier, pero todo su otro código se ven muy bien. Ahora puede hacer algo como esto:.
DataValueModifier dataValueEnum = DataValueModifier.toDataValueModifier(dataValue);
if (dataValueEnum == DataValueModifier.EQUAL) {
...
}
o incluso
switch(DataValueModifier.toDataValueModifier(dataValue)) {
case EQUAL:
// ...
break;
case GREATER_THAN:
// ...
break;
case GREATER_EQUAL:
// ...
break;
// ... define all the cases you want
case UNKNOWN:
default:
// ...
}
debe comparar ella como 'DataValueModifier.EQUAL.getValue() es igual a (DataValue)' y las enumeraciones son mejores para algo como días de la semana ('Day.MONDAY, Day.TUESDAY y encendido) y haciendo una comparación de interruptor. –
se ve bien para mí, lo configuré como dice Paul a continuación, pero por lo demás está claro y no parece tan tonto ... –
Supongo que dataValue es una cadena? Si es así, debería poder anular 'DataValueModifier.toString()' y simplemente hacer esto: 'dataValue.contains (DataValueModifier.EQUAL) ' Si también hace importaciones estáticas como sugirió Paul, se convertirá en' dataValue.contains (EQUAL) ' – KJP