gpt4 book ai didi

java - 即使使用 ListIterator,ConcurrentModificationException 仍然存在

转载 作者:行者123 更新时间:2023-11-29 06:32:18 24 4
gpt4 key购买 nike

我正在用 Java 开发一个图书馆系统。我有一个名为 Things 的类(class),有两个 child :PrintDigital打印然后分为书籍期刊

以下是我编写的用于打印项目的代码片段。完整代码包含导入。

public class Collection
{
private ArrayList <Things> theCollection;
private ListIterator <Things> listItr;

public Collection ()
{
theCollection = new ArrayList <> ();
listItr = theCollection.listIterator ();
}

public void get ()
{
Things sThing;
Book sBook;
Periodical sPeriodical;
Digital sDigital;

sThing = listItr.next ();
if (sThing instanceof Book)
{
sBook = (Book) sThing;
sBook.bookInfo ();
}
else if (sThing instanceof Periodical)
{
sPeriodical = (Periodical) sThing;
sPeriodical.periodicalInfo ();
}
else if (sThing instanceof Digital)
{
sDigital = (Digital) sThing;
sDigital.digitalInfo ();
}
}

public void printAll ()
{
while (listItr.hasNext ())
get ();
}
}

我对 get() 方法中的以下语句有疑问:

sThing = listItr.next ();

当我运行代码时,它给了我一个 ConcurrentModificationException。我试图在网上搜索答案,但他们都建议使用迭代器,我有那个。我哪里做错了?

感谢您的帮助。

最佳答案

问题

您在构造类时直接在创建列表后创建/请求迭代器。此时列表将为空。

我假设您之后会在该列表中添加/删除元素。这是一个并发修改,因为迭代器限制迭代在其创建后发生在未修改的列表上。对迭代器的下一次调用将抛出此异常。

解决方案

不要在类的构造函数中创建迭代器。在需要的时候创建它:

public class Collection {
private ArrayList <Things> theCollection;

public Collection () {
theCollection = new ArrayList <> ();
}

public void get () {
...
ListIterator <Things> listItr = theCollection.listIterator();
sThing = listItr.next ();
...
}
}

关于java - 即使使用 ListIterator,ConcurrentModificationException 仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30724272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com