如何删除以下代码中的@SuppressWarnings("unchecked")
?
public <T extends Enum<T>> T getEnum( String key, T dflt ) {
final String value = properties.getProperty( key, dflt.name());
@SuppressWarnings("unchecked")
final Class<T> clazz = (Class<T>)dflt.getClass();
return Enum.valueOf( clazz, value );
}
答案 0 :(得分:5)
所有Enum<E>
子类都有一个返回正确参数化的Class
的方法。
public <T extends Enum<T>> T getEnum(String key, T dflt) {
final String value = properties.getProperty(key, dflt.name());
final Class<T> clazz = dflt.getDeclaringClass();
return Enum.valueOf(clazz, value);
}
编辑:您之前的解决方案是错误的,而不仅仅是糟糕的风格。
public final Class<E> getDeclaringClass()
返回与此枚举常量的枚举类型对应的Class对象。当且仅当e1.getDeclaringClass()== e2.getDeclaringClass()时,两个枚举常量e1和e2具有相同的枚举类型。 (此方法返回的值可能与Object.getClass()方法返回的值不同,对于具有常量特定类主体的枚举常量。)
Enum.valueOf(Class, String)
如果传入的Class
是具有常量特定类主体&#34;的&#34;枚举常量的Class
,则可能会抱怨。 Class.isEnum()
会为这些课程返回false
。