如何避免这种java泛型警告

时间:2010-02-04 15:59:45

标签: java generics

采用以下方法,该方法仅按名称返回字段映射:

public static < T > HashMap< String, Field > getFields( Class< T > klass ) {
    HashMap< String, Field > fields = new HashMap< String, Field >();
    for ( Field f : klass.getFields() ) {
        fields.put( f.getName(), f );
    }
    return fields;
}

如果删除方法签名中的泛型类型,则该方法的行为相同,只是您收到使用原始类型的警告。我遇到过其他类似的事情,尤其是反射,你不一定有输入类型。看起来反射只是自然会出现泛型问题,因为反射是为了让你在知道(或关心)类型时使用对象。

除了在所有内容上粘贴“@SuppressWarning”之外,是否有人对更优雅的处理反射方式有任何好的想法,而不会被泛型一直骂?

2 个答案:

答案 0 :(得分:5)

这个怎么样(你不需要模板参数T,所以你可以跳过它):

public static HashMap< String, Field > getFields2( Class<?> klass ) {
    HashMap< String, Field > fields = new HashMap< String, Field >();
    for ( Field f : klass.getFields() ) {
        fields.put( f.getName(), f );
    }
    return fields;
}

答案 1 :(得分:4)

Effective Java, Chapter 5 (Generics)

  • 不要在新代码中使用原始类型
  • 偏好通用方法

所以 - 不要删除类型参数。