java - 添加新元素时,ArrayList 的所有元素都会更改吗?

标签 java android arrays loops reference

<分区>

首先,很抱歉无法提供任何源代码。我的项目非常大,将所有内容链接起来是不切实际的,而且我无法缩小这个非常烦人的问题。我会在这里尽力解释。

我在我的代码中的每个循环中动态创建一个类的新实例。这个实例在循环中被动态地赋予了几个属性,例如“名称”。在每个循环结束时,新生成的实例被添加到另一个第三类中的 ArrayList 中。

然而,问题是当添加新元素时,无论出于何种原因,所有先前的元素都会更改以与最新元素完全匹配。我的猜测是 ArrayList 正在创建对动态创建元素的引用,因此每当它发生变化时,它们都会发生变化,但我不知道如何解决这个问题。

对于任何建议,我将不胜感激,并再次为本解释的质量道歉。我将发布您可能希望看到的任何特定代码 fragment

根据要求 - XmlHandler.java - http://pastebin.com/mGmWt1RD ParsedDataSet.java = http://pastebin.com/k1xb3KBe Content.java = http://pastebin.com/UxiL2f9q

只是为了减少您的理解时间 - 该项目是一个 epub 阅读器。 XMLHandler 是从另一个未显示的类中的 SAX 解析器调用的。 XMLHandler 对于 3 个不同的 XML 集使用了 3 次不同的时间,因此那里有些困惑。

问题在于“toc”ArrayList。 'toc' 或 TableOfContents 保存稍后要引用的 Contents 实例(未显示)。我正在尝试将数据传递给“内容”的每个新实例,然后将其传递到静态 ArrayList

最佳答案

我见过很多人报告过这种问题很多次,它总是归结为:你实际上不是创建一个新实例,而是在每次迭代中使用同一个实例的循环。这是一个很容易犯的错误,尤其是当您来自一种具有不同复制语义的语言时。您可以通过多种不同方式犯此错误;如果您编辑问题以显示循环代码,我相信我能够解释发生了什么。

好的,现在您已经添加了代码:问题是在“Content”中,所有数据成员都被标记为“static”。在 Java 中,这意味着所有对象共享一个变量——即,该变量对每个对象具有相同的值。所以实际上您正在创建许多内容对象以放入 ArrayList,但它们看起来都一样!从 Content 的数据成员中删除那些“静态”属性,一切就绪。

关于java - 添加新元素时,ArrayList 的所有元素都会更改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608828/

相关文章:

java - 在 java 中使用 OpenGL ES 创建游戏

java - 如何使用 Jsoup 将数据发布到网站

android - 我们如何将 Flutter App 导入 Unity 3d

java - @+id/android :list and @+id/list 有什么区别

c++ - 在 C 中添加和删除 a ( void * )

java - 客户端 while 循环从服务器发送和接收

java - 如何跳过并按逐行读取的字母字符串数组排序

android - 形成此 SQL 语句的正确方法是什么?

java - 在 Java 中使用 { } 进行数组初始化

java - 在java中将多个结果保存在数组中