我有以下比较器类:
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());
}
}
Run Code Online (Sandbox Code Playgroud)
Tuple类本身是通用的,有两个类型参数:
public class Tuple<T1 extends Comparable, T2 extends Comparable>
{...}
Run Code Online (Sandbox Code Playgroud)
为什么我会取消选中调用有关compareTo()方法的警告?
为什么我会取消选中调用有关
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());
}
}
Run Code Online (Sandbox Code Playgroud)
此外,您应该更改您的Tuple类,以使类型参数使用泛型Comparable,而不是原始类型:
public class Tuple<T1 extends Comparable<? super T1>,
T2 extends Comparable<? super T2>> { }
Run Code Online (Sandbox Code Playgroud)
注意:我已经使用过Comparable<? super T1>而不是Comparable<T1>为了使它适用于超类型正在实现的子类型Comparable<SuperType>.
此外,由于Comparables是消费者,因为他们消费他们正在比较的类型,我们使用? super T1.
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |