Sikker brug af Enum valueOf til String-sammenligning på en switch
Du skal fange IllegalArgumentException
try {
switch (ACTION.valueOf(valueToCompare)) {
}
} catch (IllegalArgumentException iae) {
// unknown
}
Eller du kan oprette din egen funktion, som gør dette.
public static <E extends Enum<E>> E valueOf(E defaultValue, String s) {
try {
return Enum.valueOf(defaultValue.getDeclaringClass(), s);
} catch (Exception e) {
return defaultValue;
}
}
Bemærk:switch(null)
kaster en NullPointerException
i stedet for at forgrene sig til default:
Brug af undtagelser til flowkontrol betragtes som en dårlig praksis.
String valueToCompare = value.toUpperCase();
ACTION action = Arrays.stream(ACTION.values())
.filter(a -> a.name().equals(valueToCompare)).findFirst().orElse(ACTION.NOTVALID);