Назначьте определенное перечисление классу <enum> в java

У меня есть перечисление, и я хочу преобразовать класс в Class<Enum> без отражения.

Например, перечисление Numbers.java

public enum Numbers {
    ONE, TWO, THREE;
}

Лучшее, что я могу сделать, это использовать отражение, как показано ниже.

Class<Enum> enumClass = (Class<Enum>) Class.forName("com.package.inner.eveninner.Numbers");

Есть ли способ сделать это без использования отражения?


Class<Enum> enumClass = (Class<Enum>) Numbers.class;

выдает ошибку компиляции:

incompatible types: Class<Numbers> cannot be converted into Class<Enum>

Почему не Class<Numbers>?

M. Prokhorov 11.04.2018 12:27

Не о каком «обращении» и говорить. Если вы хотите ссылаться на свой enum как на класс, вы можете просто использовать Numbers.class, который является Class<Numbers>. Не совсем уверен, что вы пытаетесь сделать.

Mena 11.04.2018 12:27

Вы не можете. Но зачем вам вообще что-то подобное делать?

Thomas Timbul 11.04.2018 12:28

Кроме того, отражение ничего не «конвертирует». Всегда.

M. Prokhorov 11.04.2018 12:31

@ThomasTimbul Мне это нужно для реализации этого anismiles.wordpress.com/2010/08/04/postgres-enum-with-hibern‌ съел Обратите внимание на функцию setParameterValues.

Kuzunoha 12.04.2018 12:58
0
5
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо этого попробуйте Class<? extends Enum<?>>.

public enum Numbers {
    ONE, TWO, THREE;
}
public void test(String[] args) throws Exception {
    Class<? extends Enum<?>> enumClass = Numbers.class;
    System.out.println(enumClass);
}

Почему это маловероятно? Class<Enum> существует в JDK в пакете java.lang.

M. Prokhorov 11.04.2018 12:54

@Hulk Как вы думаете, есть разница между Class<Enum> и, скажем, Class<Enum<ABC>>?

lexicore 11.04.2018 13:02

@Hulk, нельзя напрямую создать экземпляр Class, будь то Class<E extends Enum<E>> или Class<Object>. Класс можно только загрузить. И Class<Enum> действительно существует. Во время выполнения в нем тоже не будет никаких изменений информации. Возьмите java.lang.Enum.class и осмотрите его.

M. Prokhorov 11.04.2018 13:12

@ М.Прохоров Хорошо, я понимаю, о чем вы

Hulk 11.04.2018 14:07

Другие вопросы по теме