Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果传递了错误类型的对象,我应该抛出什么类型的异常?_Java_Exception_Comparable - Fatal编程技术网

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

Java 如果传递了错误类型的对象,我应该抛出什么类型的异常?,java,exception,comparable,Java,Exception,Comparable,如果将错误类型的对象传递到compareTo方法中,我应该引发什么类型的异常 ClassCastException?当传入的值不是正确的值时,它在一般意义上是IllegalArgumentException 然而,正如所建议的,对于不正确的类型,它也可能是一个ClassCastException。然而,我还没有遇到这样做的用户代码 但更基本的是,如果您将compareTo与泛型一起使用,这将是一个编译时错误 考虑这一点: public class Person implements Compar

如果将错误类型的对象传递到compareTo方法中,我应该引发什么类型的异常


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文档!