2016-01-28 37 views
3

通過大量的調試(我不想重複),我發現只有當我的某個對象被給了一個比較器來打破它的接口合約(即一個比較器compare(a, a)返回一個非零值)。當一個實現中斷它的接口的合同時拋出了什麼異常?

我應該拋出什麼樣的例外?

我以爲我可以從TreeMap中獲得靈感,它需要一個比較器,但如果你給它一個廢話比較器,它會變得奇怪(不會引發異常)。

+1

一個接口不能確定該方法應該返回什麼,只有類型。界面中是否有預見的異常? – Stultuske

+0

您沒有得到:* Java比較方法違反了其總體合同*? – Idos

+1

所有比較操作都會在消息中拋出java.lang.IllegalArgumentException異常**比較方法違反了它的一般合約** – Codebender

回答

2

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

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

你可以看看documentation

拋出,表明一個方法傳遞了一個不合法或不正確的參數。

4

我不知道如何觸發它,因爲我嘗試了一些實例自己,但Arrays.sort可以

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

發現在代碼TimSort。我以前看過這個消息。

+1

我見過的一種典型方法是像'return(a> = b)一樣實現比較器? 1:-1;',即忽略了平等的可能性。 –

+0

@AndyTurner我試過'ints.sort((a,b) - > 1)'和類似的東西。 –

+1

@PeterLawrey這通常工作 - 不確定需求是什麼...雖然... http://ideone.com/asOlrx – assylias

相關問題