如果传递了错误的对象类型,我应该抛出什么类型的异常?

时间:2012-05-03 11:38:09

标签: java exception comparable

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

ClassCastException异常?

2 个答案:

答案 0 :(得分:20)

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

但是,如@Tom's answer below所示,对于不正确的类型,它也可能是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);
    }
}

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

答案 1 :(得分:6)

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

  

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

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