我有一节课:
public class Range<T extends Comparable<? super T>> {
private T start;
private T end;
在另一堂课中,我有:
public void validate(Object target, Errors errors) {
Range range=(Range)target;//Eclipse complains about unparamterized type
if (range.getStart().compareTo(range.getEnd())>0){ //This gives an error if I do Range<?>
现在,Eclipse发出关于范围是原始类型的警告。如果我用(Range<?>
)替换它,那么我得到一个错误,大概是因为它使它不知道类型的参数化。如果我<? extends Comparable>
,我仍然会收到警告,因为我没有参数化Comparable。是否有摆脱警告的好方法?
我应该只做@SuppressWarnings吗?
答案 0 :(得分:2)
您可以使用(Range<? extends Comparable<Object>>)target
,但仍然会有未经检查的广告,您需要使用@SuppressWarnings ( "unchecked" )
来抑制。
因此,如果您可以更改方法签名以使用Range<T>
而不是Object
,我就会这样做。
答案 1 :(得分:2)
这个变体没有给出任何警告(虽然我不确定为什么编译器甚至需要这个提示,因为它可以/应该通过Range的定义知道):
public <T extends Comparable<? super T>> void validate (Range<T> range, Errors errors) {
if (range.getStart().compareTo(range.getEnd()) > 0) {