gpt4 book ai didi

java - 使用 JRE 1.7 排序时哪个类抛出 IllegalArgumentException?

转载 作者:搜寻专家 更新时间:2023-11-01 02:13:15 25 4
gpt4 key购买 nike

我在 Java7 中使用 Collections.sort() 遇到了(显然臭名昭著的)IllegalArgumentException
感谢 SO 我明白了原因,这基本上是(咳嗽)糟糕的代码。
问题是,我无法自己重现异常。我做了一些 jdk 源代码挖掘,并找到了哪个类抛出该异常。这个想法是创建相应的测试用例。

顺便说一句,这是代码
<骄傲级别="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);
}

/骄傲>最重要的是,“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)

最佳答案

看起来崩溃是由整数溢出引起的,但这不应该是这样。这被确定为错误,它也为您提供了解决方法。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7075600

试试这个作为临时修复:

Adding -Djava.util.Arrays.useLegacyMergeSort=true to my eclipse.ini does seem to have resolved the issue.

您可以在我发布的同一链接中找到此修复程序。

另请访问此 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6923200 ,这是在第一个链接之前报告的同一种错误,但是它是关闭,因为他们无法重复创建相同的问题。

关于java - 使用 JRE 1.7 排序时哪个类抛出 IllegalArgumentException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13039631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com