当前位置: 首页 > 知识库问答 >
问题:

@Override中的内部compareTo()方法引起的混乱

万阳嘉
2023-03-14
        @Override
        public int compareTo(StockItem o){
            if(o != null)
                return this.itemName.compareTo(o.getItemName());
        }

我知道,这对你们中的许多人来说相当简单,但我想澄清这些疑问。乍一看,它看起来像是递归函数,或者像是调用父compareTo函数。

然而,在研究之后,我倾向于认为这两种比较方法是不同的。实际被重写的第一个来自可比较的接口,第二个来自String类。因此,我们可以从String类调用compareTo,同时重写Comparable compareTo方法。

请证实我的想法。谢谢你。

共有2个答案

丁承德
2023-03-14

考虑一下这个。

class MyClass implements Comparable<MyClass> {
   private Integer value;
   // other fields and constructors here too
   @Override
   public int compareTo(MyClass m) {
        Objects.requireNonNull(m);
        return value.compareTo(m.value);
   }
}

在上述情况下,我只希望MyClass实例在单个字段上具有可比性(如果我选择的话,我可以有更多)。因此,另一个调用只是利用对象(本例中为整数)自己的compareTo方法。这也意味着在这种情况下,MyClass具有与Integer相同的自然顺序。

王棋
2023-03-14
 public int compareTo(StockItem o){  <---- this refers to your Class  

 this.itemName.compareTo(o.getItemName());  <---- this calls compareTo() method of another Class that
    //you refer on your class. So you have maybe a ItemName itemName on your main class
    //as a field and maybe ItemName is String class I don't know.
    //but this compareTo is called on the Class of that field whatever that is
 类似资料:
  • 问题内容: 我正在编写一个类,该类将一堆银行帐户放入数组列表中,并根据其帐号进行排序。我写的方法如下: 在我的主要方法中,是数组列表的变量。当我尝试执行操作时无法执行此操作。它给我一个错误,说出诸如“无法从参数实例化,因为实际参数和形式参数的长度不同”和“推断的类型不符合声明的边界”之类的错误。我以为这是由于我没有重写方法,但是当我尝试这样做时,它说“方法不会重写或实现超类型的方法”。我不明白问题

  • 我有一个实现可比较接口的类。在这个类中,我需要重写compareTo方法,以便按值对对象进行排序。 我不知道的是如何执行Long类型的比较。当试图检查值是否大于或小于另一个Long值时,我会出错。我知道Long是long的对象,但不知道如何比较两个Long。 代码示例: 错误消息: 五、 V很长,很长

  • 问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除

  • 我被要求写一个student.compareTo方法,如果两个学生的名字和两个学生的姓氏相同,则该方法应返回0。如果学生的名字按字典顺序排序低于传入的名字,则应返回负值。如果学生的名字按字典顺序排序高于传入的名字,则应返回正值。 这是我到目前为止的代码。对于负值和正值,它应该是固定值还是我应该使用compareTo值? 这是另一个代码。我想知道我是否做对了

  • 本文向大家介绍C#中的UInt32.CompareTo()方法与示例,包括了C#中的UInt32.CompareTo()方法与示例的使用技巧和注意事项,需要的朋友参考一下 C#中的UInt32.CompareTo()方法用于将当前实例与指定的对象或UInt32进行比较,并返回其相对值的指示。 语法 以下是语法- 上面,第一种语法的Val是要比较的对象。第二语法的Val是要比较的无符号整数。 如果当

  • 当实现Comparable接口并重写compareTo方法时, 第三行,我意识到当我重写它时,我可以使用compareTo,它会自动按照自然顺序进行比较。但是在可比较的界面中,它不是一个抽象的方法。没有定义它,它还可以比较吗?还有,为什么我不需要使用super关键字来区分这个比较。