通用枚举解析器没有未经检查的警告

时间:2016-12-14 12:43:55

标签: 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 );
}

1 个答案:

答案 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

相关问题