如何避免这种java泛型警告

Ste*_* B. 4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

tan*_*ens 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;
}
Run Code Online (Sandbox Code Playgroud)