java – 使用JRE 1.7排序时哪个类抛出IllegalArgumentException?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用JRE 1.7排序时哪个类抛出IllegalArgumentException?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1656字,纯文字阅读大概需要3分钟。
内容图文
![java – 使用JRE 1.7排序时哪个类抛出IllegalArgumentException?](/upload/InfoBanner/zyjiaocheng/816/4fce6438b17e45a7928dda0d85d2a269.jpg)
我在Java7中使用Collections.sort()遇到了(显然是臭名昭着的)IllegalArgumentException
多亏了我理解原因,这基本上是(咳嗽)糟糕的代码.
问题是,我无法自己重现异常.我做了一些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);
}
< / 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)
解决方法:
如果不看堆栈跟踪本身就很难分辨.
但是docs提到该方法本身可以抛出异常.
(optional) if the implementation detects that the natural ordering of the list elements is found to violate the Comparable contract
更新
它看起来像是因为您的对象不能满足Comparable一致性要求:
The natural ordering for a class C is said to be consistent with equals if and only if e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2) for every e1 and e2 of class C. Note that null is not an instance of any class, and e.compareTo(null) should throw a NullPointerException even though e.equals(null) returns false.
内容总结
以上是互联网集市为您收集整理的java – 使用JRE 1.7排序时哪个类抛出IllegalArgumentException?全部内容,希望文章能够帮你解决java – 使用JRE 1.7排序时哪个类抛出IllegalArgumentException?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。