【发布时间】:2014-08-07 12:09:22
【问题描述】:
在我的应用程序中,我有一些代码以最经典的方式将元素放入 HasSet:
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@XmlElementWrapper
private Set<ParameterDefinition> parameterDefinitions = new HashSet<ParameterDefinition>();
// .... in a method far below ...
this.parameterDefinitions.add(createParameterDefinitionFor);
此代码已使用两年,从未出现任何故障迹象。
然而,我们最近将我们的代码库移到了 java 7 上(是时候了)。而且,由于这一举动,这条精确的指令仅*在我们使用 Suse 10 和 Java 1.7.0_45 且具有以下堆栈跟踪的 Linux 机器上失败。
Daemon Thread [p: thread-pool-1; w: 9] (Suspended (exception java.lang.ArrayIndexOutOfBoundsException))
java.util.HashMap<K,V>.put(K, V) line: 498
java.util.HashSet<E>.add(E) line: 217
在任何 Java 7 版本的 Windows 上运行的测试都不会暴露这种行为。
那么……出现这种奇怪的行为有什么原因吗?
【问题讨论】:
-
能看到使用地图的代码吗?