如何摆脱对“ compareTo(T)”警告的未经检查的调用?

我有一个通用类来表示一行值中的间隔。

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],[1,2]}

如果列表为

{['e','v'],['a','d'],['c','f']}

我正在尝试

{['a','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'

jlx53727 回答:如何摆脱对“ compareTo(T)”警告的未经检查的调用?

未经检查的警告是由于您的原始类型数组new Interval[0]引起的。

请注意,您不是在对intervals进行排序,而是对它的副本进行排序,然后丢弃排序后的副本。

为什么要去数组?

intervals.sort(/* your comparator */);

此外,您的比较器不必要地复杂:

Comparator.comparing(Interval::getStart)
本文链接:https://www.f2er.com/2400303.html

大家都在问