Мне очень сложно писать статические методы, которые работают для Enums
. Это действительно надуманный пример, но предположим, что вы хотите написать метод, который принимает константу Enum
и возвращает следующий объявленный. Я обнаружил (примерно через час), что вы можете сделать это следующим образом. Он работает и не генерирует никаких предупреждений компилятора.статические методы, которые принимают параметры Enum
static <E extends Enum<E>> E getNextDeclared(E e) {
int ordinal = e.ordinal();
for (Object object : EnumSet.allOf(e.getClass())) {
if (e.getClass().cast(object).ordinal() == ordinal + 1) {
return e.getDeclaringClass().cast(object);
}
}
throw new IllegalArgumentException();
}
Я что-то не хватает? Можете ли вы сделать это без бросков? Есть ли способ упростить это, не создавая нагрузки на предупреждения? Кроме того, что подходит для записи вместо Object
?
Ну, e.getClass(). GetEnumConstants [e.ordinal() + 1] будет проще ... –
@LouisWasserman Я думаю, что это должно быть 'e.getDeclaringClass(). GetEnumConstants() [e.ordinal () + 1]; ' – Jesper
Да, хороший улов. –