java - 如何重写以下方法而不出现未经检查的警告?

标签 java generics warnings unchecked

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/

相关文章:

java - 提交后 MySQL 与 Hibernate JPA 错误 id

c# - 无法从类转换为通用接口(interface)

mysql - LOAD DATA INFILE 同一行有数百个警告

c - GCC 没有发出警告,尽管它应该发出警告

c# - 动态创建 IList 类型的新实例

Java 最新更新安全弹窗

java - 为什么缺少 Java 权限时会出现 NPE?以及如何找出哪个权限?

java - 为什么我在执行 POST 请求时收到 405 Method Not Allowed

java - 使用 XStream 序列化为 XML 但未获取所有字段

java - 为二叉树(通用)实现compareTo(Comparable<T>)