在我的应用程序中,我有一些代码以最经典的方式将元素放在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(很高兴)。而且,从那次移动开始,这个精确的指令在我们的Linux机器上使用Suse 10和Java 1.7.0_45仅使用以下堆栈跟踪 。
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
在Windows上运行任何Java 7版本的测试都不会暴露该行为。
所以......有什么理由出现这种奇怪的行为吗?