我有一个泛型参数接口及其ParameterImpl具体类。 T将是Float,Long,Integer或String。
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
}
对于Map<String, Parameter> params;
变量案例,我应该使用<?>
还是@SuppressWarnings
?为什么你建议的方式更好?
对于方法案例,如果我使用<?>
或<T extends Comparable>
(在方法签名中),则会影响所有其他相关方法。这里的@SuppressWarnings
将覆盖此问题。那么,我应该选择哪个选项?为什么你建议的选项比其他选项更好?
在大多数情况下,Eclipse建议采用@SuppressWarnings
方式。 @SuppressWarnings
是正确的方式还是内部存在潜在错误的临时解决方案?
答案 0 :(得分:1)
如果参数类型可能不同,我会使用<?>
。使用原始类型,因此@SuppressWarnings可能会导致编译器进一步禁用泛型类型检查(取决于您如何使用这些参数),这可能不是您想要的。
当然,您无法改变Parameter<?>
实例的价值,但这可能不太明智,因为您不再了解该类型。
有关原始类型的更多信息,请查看此处:What is a raw type and why shouldn't we use it?