Aub*_*bin -1 java generics enums warnings
如何删除@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 );
}
Run Code Online (Sandbox Code Playgroud)
所有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);
}
Run Code Online (Sandbox Code Playgroud)
编辑:你以前的解决方案是错误的,而不仅仅是糟糕的风格.
Run Code Online (Sandbox Code Playgroud)public final Class<E> getDeclaringClass()返回与此枚举常量的枚举类型对应的Class对象.当且仅当e1.getDeclaringClass()== e2.getDeclaringClass()时,两个枚举常量e1和e2具有相同的枚举类型.(此方法返回的值可能与Object.getClass()方法返回的值不同,对于具有常量特定类主体的枚举常量.)
Enum.valueOf(Class, String)如果Class传入的是Class"具有常量特定类体的枚举常量" ,则可能会抱怨.Class.isEnum()将返回false这些课程.