繁体   English   中英

如何避免这种java泛型警告

[英]How to avoid this java generics warning

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

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”之外,是否有人对更优雅的处理反射方式有任何好的想法,而不会被泛型一直骂?

怎么样(你不需要模板参数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;
}

Effective Java,第5章(泛型)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM