如何在Java中的复杂类型上放置参数?

时间:2014-07-15 14:39:19

标签: java generics

我有一节课:

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吗?

2 个答案:

答案 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) {