【问题标题】:Java BeanMap Iterator throws UnsupportedOperationException on iterator.remove()Java BeanMap 迭代器在 iterator.remove() 上抛出 UnsupportedOperationException
【发布时间】:2019-09-11 08:57:21
【问题描述】:

我在调试应用程序时遇到问题,该应用程序使用迭代器循环遍历 beanmap 中的条目。当我在迭代器上使用 remove() 函数时,应用程序崩溃了,我不知道为什么。它以前工作得很好。

该应用程序已经运行了一年多,没有任何问题。也许 .remove() 函数从未真正调用过,因为它位于 if 子句中,但我仍然认为它应该可以正常工作。

代码如下:

BeanMap bm = new BeanMap(pKzlGd);
        Iterator entries = bm.entrySet().iterator();
        while (entries.hasNext()) {
            Map.Entry<Object, Object> entry = (Map.Entry<Object, Object>) entries.next();
            if (entry.getValue() instanceof Class) {
                entries.remove();
            }
        }

这基本上是我得到的 StackTrace 错误:

Stack trace: javax.faces.FacesException: #{aopUpload.upload}: java.lang.UnsupportedOperationException: remove() is not supported
         at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
         at si.nkbm.bilbon.net.ExceptionActionListener.processAction(ExceptionActionListener.java:24)
         at javax.faces.component.UICommand.broadcast(UICommand.java:387)
         at org.ajax4jsf.component.UIInclude.broadcast(UIInclude.java:170)
         at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329)
         at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:304)
         at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:261)
         at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:474)
         at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
         at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
         at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)

【问题讨论】:

  • 检查是否在创建不可修改的地图?
  • UnsupportedOperationException: remove() is not supported

标签: java crash iterator unsupportedoperation


【解决方案1】:

您可以使用BeanMapMap 提供的迭代器似乎不支持删除条目。我想您以前从未通过if 声明。这种行为是预期的。 Documentation 提到实际上不允许删除条目。

【讨论】:

  • 我在这里可能是错的,但我已经看到了几个示例,其中建议的代码与我的非常相似并且运行良好(例如这里:stackoverflow.com/questions/1884889/…)...我会尝试找到另一种方法但是,我想是的。
  • 这个问题是关于 Map 提供支持删除的迭代器。这是这个范围的唯一区别。
猜你喜欢
  • 2020-05-17
  • 1970-01-01
  • 2012-11-21
  • 2019-02-27
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 2022-01-22
相关资源
最近更新 更多