private <K> Map<K, Object> createMap(final Class<K> keyClass) {
final boolean isEnum = keyClass.isEnum();
if(isEnum) {
// The following two lines throw warnings
final Class<? extends Enum<?>> enumCls = (Class<? extends Enum<?>>)keyClass;
final Map<K, Object> map = (Map<K, Object>)new EnumMap(enumCls);
return map;
}
else{
final Map<K, Object> map = new HashMap<K, Object>();
return map;
}
}
警告
found : java.lang.Class<K>
required: java.lang.Class<? extends java.lang.Enum<?>>
final Class<? extends Enum<?>> enumCls = (Class<? extends Enum<?>>)keyClass;
^
T.java:9: warning: [unchecked] unchecked call to EnumMap(java.lang.Class<K>) as a member of the raw type java.util.EnumMap
final Map<K, Object> map = (Map<K, Object>)new EnumMap(enumCls);
^
T.java:9: warning: [unchecked] unchecked cast
found : java.util.EnumMap
required: java.util.Map<K,java.lang.Object>
final Map<K, Object> map = (Map<K, Object>)new EnumMap(enumCls);
^
3 warnings
最佳答案
编译器无法执行某些检查,并且会向您发出警告。在此方法中避免这些的唯一方法是在方法之前添加注释
@SuppressWarnings("unchecked")
即使是像 ArrayList 这样的集合,在编译时也会出现警告。
关于java - 如何重写以下方法而不出现未经检查的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5510646/