Java:为什么我不能在Comparator中抛出异常?

Alb*_*ert 6 java exception-handling exception

直接的答案是因为Comparator.compares接口被指定为不会抛出异常.但那是为什么呢?

或者说它不同:我Comparator必须依赖于可以抛出异常的函数.从理论上讲,这不应该发生.但如果它发生了,我希望它突破我使用它Comparator(in Collections.sort)的整个功能.即我希望它只是表现为发生了未处理的异常.

看起来这是不可能以一种明显的自然方式(因为如果接口说它不能抛出异常,它就不能).

我该如何解决这个问题?有一个丑陋的尝试/捕获并打印出异常并希望我认识到它?这似乎是一种非常丑陋的方式.

bra*_*amp 13

您始终可以抛出RuntimeException或从中派生的RuntimeException,甚至可以从未明确声明自己抛出异常的方法中抛出.


gaw*_*awi 5

在这种情况下,我会重新抛出一个,AssertionError因为你认为不能引发异常.不要忘记使用该initCause()方法传播信息(AssertionError没有构造函数接受a Throwable)

  • `AssertionError`有一个接受`Object`的构造函数,如果它是'Throwable`,它将被用作原因.(随机附注:我相信他们在JDK7中正在改进这一点.) (2认同)