如何摆脱 Unchecked call to 'compareTo(T)' 警告?
How to get rid of Unchecked call to 'compareTo(T)' warning?
我有一个通用的 class 来表示一行值中的一个区间。
public class Interval<T extends Comparable<T>> {
private boolean isStartInclusive;
private T start;
private T end;
private boolean isEndInclusive;
//constructors and getters and setters
}
我有一个相同类型的区间列表。我正在尝试根据它们的起始值对它们进行排序。
所以如果列表是
{[1,2], [0,3], [-10,4]}
我正在尝试获取
{[-10,4], [0,3], [1,2]}
或
如果列表是
{['e','v'], ['a','d'], ['c','f']}
我正在尝试获取
{['a','d'], ['c','f'], ['e','v']}
排序代码如下
public static <T extends Comparable<T>> List<Interval<T>> sortIntervals(List<Interval<T>> intervals) {
Interval[] intervalsArray = intervals.toArray(new Interval[0]);
Arrays.sort(intervalsArray, (o1, o2) -> o1.getStart().compareTo(o2.getStart()));
return Arrays.asList(intervalsArray);
}
但是调用Arrays.sort
的那一行,有编译警告:Unchecked call to 'compareTo(T)' as a member of raw type 'java.lang.Comparable'
出现未经检查的警告是因为您的原始类型数组 new Interval[0]
。
请注意,您不是在排序 intervals
,而是在排序它的副本,然后丢弃已排序的副本。
为什么要去阵列?
intervals.sort(/* your comparator */);
此外,您的比较器不必要地复杂:
Comparator.comparing(Interval::getStart)
我有一个通用的 class 来表示一行值中的一个区间。
public class Interval<T extends Comparable<T>> {
private boolean isStartInclusive;
private T start;
private T end;
private boolean isEndInclusive;
//constructors and getters and setters
}
我有一个相同类型的区间列表。我正在尝试根据它们的起始值对它们进行排序。
所以如果列表是
{[1,2], [0,3], [-10,4]}
我正在尝试获取
{[-10,4], [0,3], [1,2]}
或
如果列表是
{['e','v'], ['a','d'], ['c','f']}
我正在尝试获取
{['a','d'], ['c','f'], ['e','v']}
排序代码如下
public static <T extends Comparable<T>> List<Interval<T>> sortIntervals(List<Interval<T>> intervals) {
Interval[] intervalsArray = intervals.toArray(new Interval[0]);
Arrays.sort(intervalsArray, (o1, o2) -> o1.getStart().compareTo(o2.getStart()));
return Arrays.asList(intervalsArray);
}
但是调用Arrays.sort
的那一行,有编译警告:Unchecked call to 'compareTo(T)' as a member of raw type 'java.lang.Comparable'
出现未经检查的警告是因为您的原始类型数组 new Interval[0]
。
请注意,您不是在排序 intervals
,而是在排序它的副本,然后丢弃已排序的副本。
为什么要去阵列?
intervals.sort(/* your comparator */);
此外,您的比较器不必要地复杂:
Comparator.comparing(Interval::getStart)