java - 如何摆脱 Unchecked call to 'compareTo(T)' 警告?

标签 java generics comparable

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

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.sort(/* your comparator */);

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

Comparator.comparing(Interval::getStart)

关于java - 如何摆脱 Unchecked call to 'compareTo(T)' 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61323999/

相关文章:

c# - 将泛型传递给扩展方法

swift - 通用获取请求

java - 编译器认为 Comparable 类型不是 Comparable

java - 可比和泛型

java - [几乎] 不会减慢分析代码的 Java 分析器

Java 流 - 无法使用 forEach 修改列表的内容

java - Array List 用最后一个元素替换所有元素

java - HashMap<K,V> 之前的 <K,V> 是什么意思? Java 中的泛型

java - Spring:具有多个值的@RequestMapping

java - 可比较和 (MyClass)null