【发布时间】:2011-08-12 15:26:14
【问题描述】:
给这个:
Class<? extends Enum> enumClass = ...; // being passed in from a constructor
Enum e = Enum.valueOf(enumClass, aString); // produces a warning that looks like
[unchecked] 未经检查的方法调用: java.lang.Enum 中的 valueOf(java.lang.Class,java.lang.String) 是 应用于(java.lang.Class,java.lang.String)
我不想使用泛型,因为这是一个重大变化。我不想压抑。我不明白为什么会发生此警告。我想这是因为无法扩展 Enum 类型。我明白了。但我不明白为什么通配符类会抛出这个奇怪的错误。有没有办法在不使用@SupressWarning 或使用泛型的情况下解决这个问题?
编辑:为了澄清,以下使用泛型的代码使警告消失。
class Foo<T extends Enum<T>>{
Class<T> enumClass;
Enum e = Enum.valueOf(enumClass, aString);
}
<T> 的用法就是我使用泛型的意思。我不能这样做,因为这将是一个巨大的级联变化。
【问题讨论】:
-
你在初始化
enumClass吗?另外,我不明白你将如何使用泛型来解决这个问题;你有什么想法? (顺便说一句,您已经在enumClass的声明中使用了泛型;为什么使用泛型会是“重大变化”?) -
所以最终答案,如果不使用@SupressWarning,这是不可能的。