Как избавиться от непроверенного вызова предупреждения «CompareTo (T)»? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть обобщенный класс c для представления интервала в строке значений.

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'

1 Ответ

4 голосов
/ 20 апреля 2020

Непроверенное предупреждение появляется из-за вашего необработанного массива, new Interval[0].

Обратите внимание, что вы не сортируете intervals, вы сортируете его копию, а затем отбрасываете отсортированная копия.

Зачем переходить на массив?

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

Кроме того, ваш компаратор излишне сложен:

Comparator.comparing(Interval::getStart)
...