Java7でCollections.sort()を使用して(明らかに悪名高い)IllegalArgumentExceptionに見舞われました。SO
のおかげで、基本的に(咳の)貧弱なコードが原因を理解しています。
問題は、私は例外を自分で再現することはできないということです。私はいくつかのjdkソースコードを掘り下げて、どのクラスがその例外をスローしているかを見つけました。アイデアは、それに応じたテストケースを作成することです。
ちなみに、ここにコードがあります
<pride level = "0">
@Override
public int compareTo( Symbol other) {
if( this.lastUse == 0) {
if( other.lastUse != 0) return (int)( -DateMicros.ONE_DAY);
} else if( other.lastUse == 0) {
return ( int)DateMicros.ONE_DAY;
}
return ( int)( this.lastUse - other.lastUse);
}
</ pride>これに加えて、「lastUse」にはマイクロ秒とミリ秒単位のタイムスタンプが割り当てられ(はい、混合)、優れたintオーバーフロースピルが発生します
。実際の質問は次のとおり
です。このコードをクラッシュさせる値は何ですか。将来的に適切なテストケースを取得します。
スタックトレースで更新:
at java.util.ComparableTimSort.mergeHi(Unknown Source)
at java.util.ComparableTimSort.mergeAt(Unknown Source)
at java.util.ComparableTimSort.mergeCollapse(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)