Java Enum.valueOf – Как обрабатывать параметр типа Class<E> как перечисление, если он также может быть целым или логичес ⇐ JAVA
Java Enum.valueOf – Как обрабатывать параметр типа Class<E> как перечисление, если он также может быть целым или логичес
У меня есть метод, который анализирует ячейку Excel (эти ячейки всегда имеют тип String). Иногда эти ячейки содержат обычные типы, такие как int или boolean, а иногда и значения перечислений:
частный статический объект parseCellStringValue(String value, Class targetType) { если (value.isBlank()) { вернуть ноль; } Еще если (targetType == String.class) { возвращаемое значение; } else if (targetType == Integer.class || targetType == int.class) { вернуть Integer.parseInt(значение); /// ... /// ... /// ... } else if (targetType == Boolean.class || targetType == boolean.class) { return Boolean.parseBoolean(значение); } else if (targetType == AttributeKind.class) { вернуть AttributeKind.valueOf(значение); } Еще если (targetType == ReturnType.class) { вернуть ReturnType.valueOf(значение); } выбросить новое IllegalStateException( String.format("Передан неподдерживаемый целевой тип: %s", targetType)); } AttributeKind и AttributeType являются перечислениями, и в будущем в этом методе будет еще много перечислений, поэтому я хотел упростить это, заменив эти if на одну ветвь if. это будет обрабатывать все перечисления.
Я написал что-то вроде этого:
else if (targetType.isEnum()) { return Enum.valueOf(targetType, value); } Но IDE показывает ошибку в targetType внутри valueOf:
Обязательный тип: Класс
Предоставлено: Класс
причина: не существует экземпляра(ов) переменной(ей) типа T, чтобы E соответствовало Enum
Как будто компилятор не знает, что он только что проверил, что targetType определенно является перечислением. Я попытался привести targetType к Enum, но это не сработало. Я не знаю, как решить мою проблему на Java. Я подозреваю, что это может быть невозможно сделать, поскольку универсальный тип должен расширять Enum, но тогда случаи Integer и Boolean не будут работать. Можно ли написать на Java простое и элегантное решение, которое обрабатывало бы все перечисления?
У меня есть метод, который анализирует ячейку Excel (эти ячейки всегда имеют тип String). Иногда эти ячейки содержат обычные типы, такие как int или boolean, а иногда и значения перечислений:
частный статический объект parseCellStringValue(String value, Class targetType) { если (value.isBlank()) { вернуть ноль; } Еще если (targetType == String.class) { возвращаемое значение; } else if (targetType == Integer.class || targetType == int.class) { вернуть Integer.parseInt(значение); /// ... /// ... /// ... } else if (targetType == Boolean.class || targetType == boolean.class) { return Boolean.parseBoolean(значение); } else if (targetType == AttributeKind.class) { вернуть AttributeKind.valueOf(значение); } Еще если (targetType == ReturnType.class) { вернуть ReturnType.valueOf(значение); } выбросить новое IllegalStateException( String.format("Передан неподдерживаемый целевой тип: %s", targetType)); } AttributeKind и AttributeType являются перечислениями, и в будущем в этом методе будет еще много перечислений, поэтому я хотел упростить это, заменив эти if на одну ветвь if. это будет обрабатывать все перечисления.
Я написал что-то вроде этого:
else if (targetType.isEnum()) { return Enum.valueOf(targetType, value); } Но IDE показывает ошибку в targetType внутри valueOf:
Обязательный тип: Класс
Предоставлено: Класс
причина: не существует экземпляра(ов) переменной(ей) типа T, чтобы E соответствовало Enum
Как будто компилятор не знает, что он только что проверил, что targetType определенно является перечислением. Я попытался привести targetType к Enum, но это не сработало. Я не знаю, как решить мою проблему на Java. Я подозреваю, что это может быть невозможно сделать, поскольку универсальный тип должен расширять Enum, но тогда случаи Integer и Boolean не будут работать. Можно ли написать на Java простое и элегантное решение, которое обрабатывало бы все перечисления?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
При создании заголовка стиля C, совместим с ABI для переключения между Enum и Enum Class?
Anonymous » » в форуме C++ - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-