Java 如果传递了错误类型的对象,我应该抛出什么类型的异常?
如果将错误类型的对象传递到compareTo方法中,我应该引发什么类型的异常Java 如果传递了错误类型的对象,我应该抛出什么类型的异常?,java,exception,comparable,Java,Exception,Comparable,如果将错误类型的对象传递到compareTo方法中,我应该引发什么类型的异常 ClassCastException?当传入的值不是正确的值时,它在一般意义上是IllegalArgumentException 然而,正如所建议的,对于不正确的类型,它也可能是一个ClassCastException。然而,我还没有遇到这样做的用户代码 但更基本的是,如果您将compareTo与泛型一起使用,这将是一个编译时错误 考虑这一点: public class Person implements Compar
ClassCastException?当传入的值不是正确的值时,它在一般意义上是
IllegalArgumentException
然而,正如所建议的,对于不正确的类型,它也可能是一个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);
}
}
公共类人员实现可比较{
私有字符串名称;
私人互联网;
@凌驾
公共内部比较(o人){
返回此.name.compareTo(o.name);
}
}
在上面的示例中,您在哪里看到传递错误类型的可能性 在这种情况下,指定要抛出的异常也就不足为奇了
ClassCastException-如果指定对象的类型阻止它
与这个物体相比
假设您使用的是泛型,如果有人试图使用原始类型、反射或其他不安全的技术调用您的方法,您将自动获得此异常。能否向我们展示您的
与代码的比较?这取决于您如何处理该异常。我可能会抛出一个带有正确消息的IllegalArgumentException
。顺便问一下,有没有一种方法不允许传递错误类型的对象?你能详细说明一下这个用例吗?也许我们可以帮助您防止运行时检查并使用编译器的功能。请注意,Comparable
可以使用泛型类型参数进行参数化,因此compareTo
可以使用特定参数。如果您在compareTo的实现中进行向下转换,您将免费获得该CCE。为什么要显式地抛出它呢?你似乎不同意API文档热衷于ClassCastException
。看来OP有更基本的问题。所有这些都应该在编译时处理。我会回答你的观点。“汤姆霍顿在对付阿达尔是查克·诺里斯,然后JavaDoc就错了:”我会认为这个问题是错误的。答案肯定会把OP引向正确的方向:)如果你做了comparable p=newperson();p、 比较(1);//使用泛型抛出ClassCastException
可能意味着您不需要显式抛出ClassCastException,甚至编译器有机会在编译时报告错误。我不同意这一点,因为JVM将抛出ClassCastException
,OP询问他们需要抛出的异常。因此,我赞成IllegalArgumentException
答案。不过,也许这是语言的问题。@maksimov API文档非常清晰。你不同意方法的说明,这是一个不寻常的立场。汤姆,我刚刚意识到我一定是瞎了。不知何故,我设法过滤掉了比较,以它们正在实现。我现在想改变我上面的说法:-)+1这是非通用实现的最佳答案,它为我们中的懒惰者提供了一个直接链接到要引导的API文档!