提问者:小点点

如何解决异常类java.util.HashMap$Values无法强制转换为HashMap中的类java.util.Enumeration


我在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。 如何解决这个问题有什么建议吗?


共3个答案

匿名用户

你的问题就在这条线上:

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;
}