1

以前の多くの人々と同じように、私IllegalArgumentException: Comparison method violates its general contract!はこれが発生する可能性があるすべてのレガシーコードをチェックする必要があると思いました. 最善の方法は、すべてのコードを調べて潜在的な問題を検出する静的分析ツールです。


  1. TimSort はこれらの問題をどのように検出しますか?
  2. コードの静的解析を実行して問題を見つけることは可能ですか?
  3. そのような利用可能なツールはありますか?たぶん、既存の静的解析ツールのルールとして?
4

1 に答える 1

1

2 つの実行をマージするマージ フェーズでそれらを検出します。通常、比較関数がルールに従っていないことを意味します。たとえば、a < bとの両方b < aが同時に true になったりa > bb > cとのすべてから true の値を取得したりしますc > a

ここで役立つ静的分析ツールは知りませんが、必要になるかどうかはわかりません。

あなたの最善の策は、比較関数に注目して、さまざまなデータセットに対して正しい値を返すことを確認することです。実際に比較関数を見つけることは、すべてのファイルを検索するだけで比較的簡単ですComparator

于 2013-06-26T03:51:49.713 に答える