Работа с REST API, у меня есть следующие настройки:Не удается получить значение перечисления из класса
public enum Ready {
YES,
NO;
}
public class Top {
public Ready readyField;
}
и некоторые из них:
public class Bottom extends Top {
... some fields
}
Теперь я делаю фильтр классы, которые расширяют класс Top. Поэтому я использую Reflection, чтобы попытаться получить значение поля, и если он не прошел фильтр, экземпляр не возвращается.
Один из таких фильтров может быть на «readyField». Итак, скажем, мой url выглядит так: «http ... /? IsReady = no».
Мой код выглядит следующим образом:
Field field = Bottom.class.getField("readyField");
Class<?> type = field.getType();
if (type.isEnum()) {
Object object = field.get(Bottom.class);
if (!object.toString().equalsIgnoreCase(value)) {
resultList.remove(instance);
continue;
}
}
поле значение не является «нет» строка из URL.
Это бросает execption:
java.lang.IllegalArgumentException: Не удается установить Ready поле Top.readyField в java.lang.Class
И я тупик. Все, что я могу найти в Google, связано с получением значений enum из класса enum. Ничего о попытке сравнить строковое значение присвоенного поля enum в классе с использованием этого перечисления.
У меня уже есть экземпляры объектов, в которых я нуждаюсь. Мне нужно получить значение enum в классе и сравнить его с данной строкой.
EDIT:
Решение, по-видимому, не использует Bottom.class, но фактический экземпляр указанного класса для функции Get().
Это то, что говорится в принятом ответе, но формулировка была немного странной для меня.
Для автоматизма 'перечисление Готов {да, нет};'. В противном случае, возможно, 'Enum.valueOf (type, string.toUpperCase())' для вас. Я не совсем уверен, что вы хотите в concreto. –
@JoopEggen Я хочу видеть, соответствует ли строка, указанная мне в URL, значением enum, заданным для экземпляра объекта. – KdgDev