我有以下比较器类:
public class CustomTupleComparator implements Comparator<Tuple>
{
public int compare(Tuple o1, Tuple o2)
{
int result = o1.getSecond().compareTo(o2.getSecond());
return result != 0
? result
: - o1.getFirst().compareTo(o2.getFirst());
}
}
Tuple类本身是通用的,有两个类型参数:
public class Tuple<T1 extends Comparable, T2 extends Comparable>
{...}
为什么我会取消选中有关compareTo()
方法的警告?
答案 0 :(得分:7)
为什么我会取消选中有关
compareTo()
方法的警告?
因为您使用的是原始类型Tuple
,而不是参数化类型。但是,要使用参数化类型Tuple
,您需要使CustomTupleComparator
类本身通用:
public class CustomTupleComparator<T1 extends Comparable<? super T1>,
T2 extends Comparable<? super T2>>
implements Comparator<Tuple<T1, T2>>
{
@Override
public int compare(Tuple<T1, T2> o1, Tuple<T1, T2> o2)
{
int result = o1.getSecond().compareTo(o2.getSecond());
return result != 0 ? result
: -o1.getFirst().compareTo(o2.getFirst());
}
}
此外,您应该更改Tuple
类,以使类型参数使用通用Comparable
,而不是原始类型:
public class Tuple<T1 extends Comparable<? super T1>,
T2 extends Comparable<? super T2>> { }
注意:我使用了Comparable<? super T1>
而不是Comparable<T1>
,以使其适用于超类型,其中超类型正在实现Comparable<SuperType>
。
此外,由于Comparable
是消费者,因为他们消费他们正在比较的类型,我们使用? super T1
。