2013-06-26 30 views
1

和以前很多人一樣,我碰到了IllegalArgumentException: Comparison method violates its general contract!我需要檢查遺留代碼以瞭解所有可能的發生。最好的方法是一個靜態分析工具,它會遍歷所有代碼並檢測可能的問題。比較方法違反其總合同!靜態分析可能嗎?


  1. 如何TimSort發現這些問題?
  2. 是否可以運行代碼的靜態分析並找出問題?
  3. 有沒有這樣的工具可用?也許作爲已有的靜態分析工具的規則?

回答

1

它將在合併階段檢測它們,當它合併兩個運行。通常,這意味着您的比較功能不符合規則,例如a < bb < a同時爲真,或者從a > b,b > cc > a的所有中獲得真值。

我不知道任何靜態分析工具,這將有助於這裏,但我不知道它甚至是需要的。

最好的辦法是隻是眼球比較功能,並確保它返回各種數據集的正確值。其實找到比較功能應該相對簡單,只需要搜索Comparator的所有文件。

+0

謝謝,我很害怕這個。其實我需要找到所有的「Comparator」和「Comparable」,這當然不是問題。只是有379個。 – sm4

+0

@ sm4,哇,這是...很多,即使是_big_應用程序。人們不得不懷疑他們是否真的有必要。 – paxdiablo

+0

不幸的遺產。我最好的選擇可能是找出那些沒有被任何測試覆蓋並減少這個數字的人。 – sm4

相關問題