Я пытаюсь написать метод, в котором я могу преобразовать из строки в объект перечисления во время выполнения, для общего перечисления. У меня есть метод подписи:Непроверенная типизация родового класса?
public static <T extends Enum<T>> Enum<T> foo(String string, Class<T> clazz)
Однако, я называю его из класса, чей общий тип параметра в явном виде не распространяется Enum. т.е.
class bar<X> {
private Class<X> clazz;
if (XIsAnEnum()) {
foo(string, clazz)
}
}
Это не компилируется, потому что даже если я знаю, из логики XIsAnEnum
, этот X extends Enum<X>
, я явно не указать это в родовом определении параметра типа, так что это не является веским аргументом.
Есть ли способ сделать неконтролируемый бросок от Class<X>
к Class<X extends Enum<X>>
, или я должен сделать новый класс bar2<X extends Enum<X>>
специально для того, когда я хочу использовать перечислений?
Я чувствую, что вам не хватает кода. То, что у вас есть, не будет компилироваться, потому что у вас нет этого оператора if в методе. – Troncoso
Да, есть какой-то дополнительный код, который пойдет туда на самом деле, но это не влияет на вопрос. –
Что содержат строки? Если это просто имя константы enum, вы можете сделать 'MyEnum.valueOf (string)', чтобы получить соответствующую константу MyEnum, и вам не нужно будет писать этот метод. – Jesper