为什么 compareTo() 在比较两个对象时收到运行时错误?

Why is compareTo() receiving runtime error when comparing two objects?

提问人:ProgrammingStudent 提问时间:3/22/2023 更新时间:3/22/2023 访问量:65

问:

在第 12 行引用对象“r2”时,会出现运行时错误。为什么会这样?

public static void main(String[] args) {
    
    Rational r1 = new Rational(-2, 6);
    System.out.println(r1.getNumerator());
    System.out.println(r1.getDenominator());
    System.out.println(r1.intValue());
    System.out.println(r1.doubleValue() + "\n");
    
    Object r2 = new Rational(1,45);
    System.out.println((r2).compareTo(r1));
    
}

在第 11 行中,我将对象类更改为 Rational,代码有效,但它不适用于对象 r2。我只是好奇这不适用于对象 r2 的根本原因。

Java 对象 转换 多态性 比较

评论

1赞 Karl Knechtel 3/22/2023
欢迎使用 Stack Overflow。用你自己的话来说,如果你试图将一个 Object 与一个 Rational 进行比较,并且你向 Object 类询问解释比较的代码,会发生什么?对象知道如何与理性进行比较吗?用你自己的话来说,如果你写了 ,并且变量的类型是 ,你认为会用什么类来查找代码?为什么?(r2).compareTo(r1)r2ObjectcompareTo
0赞 Old Dog Programmer 3/22/2023
你好。为了将来参考,当问题涉及错误消息时,请在问题正文中附上错误消息的副本作为文本。当问题引用代码中的行号时,问题正文应指示所引用的行号。将示例输入和输出作为文本包含可能会有所帮助。
1赞 Hovercraft Full Of Eels 3/22/2023
首先,永远不要尝试运行无法编译的代码,就像你正在做的那样。

答:

1赞 Unmitigated 3/22/2023 #1

Object没有声明具有名称的方法,因此您不能调用它。通常,提供排序顺序的类会实现 ,因此您应该使用这种类型来保证能够比较两个对象。compareToComparable