我在ClassCastException中得到错误,如下所示。
java.lang.ClassCastException: class java.util.HashMap$Values
cannot be cast to class java.util.Enumeration
(java.util.HashMap$Values and java.util.Enumeration are in module
java.base of loader 'bootstrap')
public static void addMemberships(final int key, MembershipData[] members) throws SpiderException
{
HashMap duplicates = new HashMap();
for (int i=0; i<members.length; i++)
{
if (duplicates.get(members[i].subjectOfCare) == null) {
duplicates.put(members[i].subjectOfCare, members[i]);
}
}
members = new MembershipData[duplicates.size()];
Enumeration elements = (Enumeration) duplicates.values(); //line where error occurs
for (int i=0; i<members.length; i++){
members[i] = (MembershipData) elements.nextElement();
}
internalMembershipToolkit.verifyData(key, members);
}
我尝试使用Enumeration elements=new IteratorEnumeration(duplicates.keySet().iterator());
,但我得到了另一个ClassCastException
。 如何解决这个问题有什么建议吗?
你的问题就在这条线上:
Enumeration elements = (Enumeration) duplicates.values(); //line where error occurs
hashMap.values()返回集合
,而不是枚举
。 您可以按如下方式修复此问题:
Iterator elements = duplicates.values().iterator(); //line where error occurs
按以下步骤执行:
Collection<MembershipData> elements = duplicates.values();
Iterator<MembershipData> itr = elements.iterator();
for (int i = 0; i < members.length && itr.hasNext(); i++) {
members[i] = itr.next();
}
如果我说错了,请纠正我,但是您正在尝试迭代HashMap值,并将它的值放在一个数组中。 这可以很容易地使用泛型来实现。 将映射定义为:
Map<Integer,MembershipData> duplicates = new HashMap<Integer,MembershipData>();
然后迭代,就像
i=0;
for(MembershipData data:dupliates.values()){
members[i++] = data;
}