【问题标题】:Why is my compareTo() method giving error [duplicate]为什么我的 compareTo() 方法给出错误 [重复]
【发布时间】:2023-12-30 14:27:01
【问题描述】:
 class pair{
    int start;
    int end;
    pair(int start, int end)
    {
        this.start = start;
        this.end = end;
    }
}
public class Solution {
    public void intervals(ArrayList<Integer> arrive, ArrayList<Integer> depart) {
        ArrayList<pair> list = new ArrayList<>();
        for(int i=0;i<arrive.size();i++)
        {
            pair p = new pair(arrive.get(i),depart.get(i));
            list.add(p);
        }
        Collections.sort(list, new Comparator()
        {
            @Override
            public int compare(pair a, pair b)
            {
               return a.start.compareTo(b.start); 
            }
            });

错误表明此处不允许使用 a.start。但 compareTo 应该适用于整数值。

    ./Solution.java:19: error: <anonymous Solution$1> is not abstract and does not override abstract method compare(Object,Object) in Comparator
        {
        ^
./Solution.java:20: error: method does not override or implement a method from a supertype
            @Override
            ^
./Solution.java:23: error: int cannot be dereferenced
               return (a.start).compareTo(b.start); 
                               ^
Note: ./Solution.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
3 errors

覆盖对我来说是正确的。我不知道它为什么会出错。

【问题讨论】:

  • 应该是new Comparator&lt;pair&gt;()。如果start 是一个int,你不能在它上面调用方法,因为它不是一个对象。
  • 无关:请遵循 java 命名约定。类名总是大写。所以,应该是Comparator&lt;Pair&gt; ;-)

标签: java overriding comparator unsafe compareto


【解决方案1】:

这就是原因:

return a.start.compareTo(b.start); 

由于 a 被定义为整数,compareTo 是无效的,int 是原始的而非对象,所以在 java 中没有定义方法 compareTo...

你也可以

使用适当的运算符比较这些整数 (> =) 或将它们替换为其包装器 Integer

class pair{
    Integer start;
    Integer end;

【讨论】:

  • 确切地说:没有任何方法可以在原始类型上调用。
  • @GhostCat 正确!原语没有方法...