Mam kod, który ustawia wartości na obiekcie za pomocą jego metod Setter. Jeden z setterów przyjmuje jako typ metody parametr Enum. Kod wygląda tak:Jak przekonwertować ciąg do wartości wyliczeniowej, gdy typ odniesienia enum jest klasą <?>?
String value = "EnumValue1";
Method setter = getBeanWriteMethod("setMyEnumValue");
Class<?> type = setter.getParameterTypes()[0];
Object convertedValue = null;
if (type.isEnum()) {
convertedValue = convertToEnum(value, type);
} else {
convertedValue = ClassUtils.convertType(value, type);
}
return convertedValue;
Pytanie brzmi, co umieścić w metodzie convertToEnum
. Wiem, że mogłem "brutalnie wymusić" przez iterację stałych enum (lub pól) obiektu, dopasowując wartość. Czy mogę przeoczyć prostszy sposób na zrobienie tego za pomocą Reflection? (Spojrzałem na kilka przykładów, ale nie znalazłem żadnego miejsca, w którym enum było znane tylko przez klasę).
Dzięki, musiałem złapać obsadę źle, gdy po raz pierwszy spróbowałem. To jest poprawne rozwiązanie. Niestety, po wypróbowaniu tego, stwierdziłem, że muszę zrobić dopasowanie niewrażliwe na wielkość liter, które 'Enum.valueOf()' nie zrobi. Wracając do podejścia brutalnej siły ... –
Ten przypadek jest okropny. "typ" nie jest "Enum.class". W każdym razie 'asSubclass' jest lepsza niż rzut hackowy. –
@ TomHawtin-tackline: użycie jako 'asSubclass' daje mi ostrzeżenia kompilatora. 'Klasa extends Enum> enumClass = type.asSubclass (Enum.class); Enum > convertValue = Enum.valueOf (enumClass, "Value1"); 'dla obu typów Raw, a także Unvhecked Invocation. Więc nie jestem pewien, czy widzę, jak to jest lepsze. –