在我的应用程序中,我有一些代码以最经典的方式将元素放入 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 上运行测试都不会暴露该行为。
那么......出现这种奇怪行为有什么原因吗?
最佳答案
你在使用Glassfish吗?在这种情况下,很可能是这个问题:https://java.net/jira/browse/GLASSFISH-20814
关于java - 在 java 1.7.0_45 中向 HashMap 添加元素会导致 ArrayIndexOutofBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182159/