13

如果将错误类型的对象传递给我的 compareTo 方法,我应该抛出什么类型的异常?

类转换异常?

4

2 回答 2

21

IllegalArgumentException当传入的值不是正确的值时,这将是一般意义上的。

但是,正如@Tom 下面的回答所暗示的那样,它也可能是ClassCastException不正确的类型。但是,我还没有遇到这样做的用户代码。

但更根本的是,如果你使用compareTo泛型,这将是一个编译时错误。

考虑一下:

public class Person implements Comparable<Person> {
    private String name;
    private int age;

    @Override
    public int compareTo(Person o) {
       return this.name.compareTo(o.name);
    }
}

您在哪里看到在上面的示例中传递了错误类型的可能性?

于 2012-05-03T11:39:39.153 回答
7

不出所料,API 文档指定了在这种情况下要抛出的异常。

ClassCastException - 如果指定对象的类型阻止它与此对象进行比较。

假设您使用的是泛型,如果有人尝试使用原始类型、反射或其他一些不安全的技术调用您的方法,您将自动获得此异常。

于 2012-05-03T11:47:36.480 回答