我在
Java7中使用Collections.sort()遇到了(显然是臭名昭着的)IllegalArgumentException
多亏了我理解原因,这基本上是(咳嗽)糟糕的代码.
问题是,我无法自己重现异常.我做了一些jdk源代码挖掘,并找到了哪个类抛出异常.我们的想法是创建相应的测试用例.
顺便说一句,这是代码
@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)