【问题标题】:Unckecked method invocation warning on Collections.sort()Collections.sort() 上的未经检查的方法调用警告
【发布时间】:2017-10-07 19:35:25
【问题描述】:

我想对作为参数接收的List<MyType> 进行排序:

static void doSomething(List<MyType> arg) {
    Collections.sort(arg);
}

...但我收到此警告:

Unchecked method 'sort(List<T>)' invocation

这里是MyType

class MyType implements Comparable {
    private int number;

    public MyType(int n) {
        number = n;
    }

    public int compareTo(MyType b) {
        return Integer.compare(number, b.number);
    }
}

我可以取消这个警告,但我想知道我做错了什么。

【问题讨论】:

  • 您的示例代码似乎与警告不符。请显示确切的代码。
  • 你应该写一个minimal reproducible example来重现问题。
  • 这很可能是因为MyType 没有使用通用的Comparable&lt;MyType&gt;。所以要删除警告,只需实现通用的Comparable 接口。
  • 这是引发警告的确切代码,MyTypedoSomething 已重命名。不知道如何使它更“最小”,但为了完整性,我将添加 MyType 的实现。

标签: java compiler-warnings unchecked


【解决方案1】:

@Aominè 说得对:MyType 实现了 Comparable 而不是 Comparable&lt;MyType&gt;。现在我已经改变了这个警告已经消失了。

【讨论】:

  • 最重要的是,原因是因为 Collections.sort(List&lt;T&gt;) 的定义方式是它期望类型参数 T 实现 Comparable&lt;? super T&gt; 因此当你没有收到警告时实现通用的Comparable 接口。
  • 在这里查看方法的完整定义 --> Collections.sort(List<T>)
猜你喜欢
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多