I want to create universal method, for any enum object, that will check if enum has specified value name, but as Enum
type object I am unnable to use method values();
. Why?
Is there any way to get values from an Enum
type object?
I need method like this to check if value from configuration is a valid string for myEnum.valueOf(String);
because if given string will be wrong then it will throw an exception (and I do not want it).
I want my method to look like this:
public static Boolean enumContains(Enum en, String valueString){
return toStringList(en.values()).contains(valueString.toUpperCase());
}
But there is no method Enum.values()
. How to create this method correctly?
Enum#values
is a method that is generated by the compiler, so you cannot use it at compile time unless you pass in a specific enum and not Enum<?>
.
See: https://stackoverflow.com/a/13659231/7294647
One solution would be to pass in a Class<E extends Enum<E>>
instead and use Class#getEnumConstants
:
public static <E extends Enum<E>> Boolean enumContains(Class<E> clazz, String valueString){
return toStringList(clazz.getEnumConstants()).contains(valueString.toUpperCase());
}
If you have an enum named MyEnum
, then you can simply pass in MyEnum.class
as the first argument.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.