当实现破坏其接口的合同时会抛出什么异常?

时间:2016-01-28 09:25:15

标签: java exception interface exception-handling

通过大量的调试(我不想重复)我发现只有当我的一个物体被给予一个破坏其界面合同的比较器时才能达到的情况(即compare(a, a)返回非零值的比较器。

我应该抛出什么样的例外?

我想我可以从TreeMap中获取灵感,它需要一个比较器,但如果你给它一个无意义的比较器,它只是奇怪的行为(不会抛出异常)。

2 个答案:

答案 0 :(得分:4)

我不知道如何触发它,因为我自己尝试了一些例子,但Arrays.sort可以

throw new IllegalArgumentException(
            "Comparison method violates its general contract!");

TimSort的代码中找到。我之前看过这个消息。

答案 1 :(得分:2)

最常见的方法是使用java.lang.IllegalArgumentException

throw new IllegalArgumentException("One of the objects given breaks the comparators interface contract ");

您可以查看documentation

  

抛出以表明方法已被传递为非法或不恰当的参数。