java - 如何避免 @SuppressWarnings({ "unchecked", "rawtypes"}) 无处不在?

标签 java generics

我有一个通用 Parameter 接口(interface)及其ParameterImpl 具体类。 T 可以是 float 、长整型、整数或字符串。

public interface Parameter<T extends Comparable<T>>  {}  
public class ParameterImpl<T extends Comparable<T>> implements Parameter<T> {}

我还有其他几个普通类,它们将使用上述通用参数类型带有警告,如下所示:

public class ProcessParameter() {

    Map<String, Parameter> params; //use <?> or @SuppressWarnings   ???

    //use <?> or @SuppressWarnings or <T extends Comparable>   ???
    public Parameter getParameter(String key, Map<String, Parameter> paramMap)
    {

    }

    //use <?> or @SuppressWarnings or <T extends Comparable>   ???
    public void addParameter(Parameter param)
    {

    }

    //use <?> or @SuppressWarnings or <T extends Comparable>   ???
    public Map<String, Parameter> getParameterMap()
    {

    }

    //many more cases with Parameter presents
}
  1. 对于 Map<String, Parameter> params;大小写可变,我应该使用 <?>@SuppressWarnings ?为什么你建议的方法更好?

  2. 对于方法案例,如果我使用 <?><T extends Comparable> (在方法签名中),那么它将影响所有其他相关的方法。 @SuppressWarnings将在此处介绍这个问题。那么,我应该选择哪个选项?为什么您建议的选项比其他选项更好?

  3. 在大多数情况下,Eclipse 会建议 @SuppressWarnings方式。是 @SuppressWarnings正确的方法还是临时解决方案,内部可能存在错误?

最佳答案

我会使用 <?>如果参数类型可能不同。使用原始类型并因此使用 @SuppressWarnings 可能会导致编译器进一步禁用泛型类型检查(取决于您如何使用这些参数),这可能不是您想要的。

当然,您不能更改 Parameter<?> 实例的值但这可能并不明智,因为您不再知道类型了。

有关原始类型的更多信息,请查看此处:What is a raw type and why shouldn't we use it?

关于java - 如何避免 @SuppressWarnings({ "unchecked", "rawtypes"}) 无处不在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27605818/

相关文章:

java - 总是在顶部窗口

java - 如果我想使用单个 UIMA 依赖库,是否需要重写整个 java 项目?

swift - 使用它的通用 ObjectType 的 PHFetchResult 扩展?

c# - 使用 Type 变量调用正确的泛型方法,带 out 和 ref

entity-framework - Entity Framework 通用存储库

java - 如何定义可以具有类型 T 或类型 List<T> 的泛型类

用于类似动态类型转换的 Java 反射/通用类型

java - JPA 多对多关联实体

java - Hibernate 尝试在外键列中插入 null

java - 在网页中搜索..Android