Mar*_*k D 8 java arrays android loops reference
首先,道歉是因为无法提供任何源代码.我的项目非常大,将一切都联系起来是不切实际的,而且我无法缩小这个非常烦人的问题.我会尽力在这里解释一下.
我在代码中的每个循环上动态创建类的新实例.这个实例在循环中动态地给出了几个属性,例如'name'.在每个循环结束时,新生成的实例将添加到另一个第3类中保存的ArrayList中.
然而问题是,当添加新元素时,无论出于何种原因,所有先前元素都会更改以完全匹配最新元素.我的猜测是ArrayList正在创建对动态创建元素的引用,这样每当它发生变化时,它们都会发生变化,但我不知道如何解决这个问题.
对于这个解释的质量,我将再次感谢任何建议和道歉.我将发布您可能希望看到的任何特定代码段
如要求 - XmlHandler.java - http://pastebin.com/mGmWt1RD ParsedDataSet.java = http://pastebin.com/k1xb3KBe Content.java = http://pastebin.com/UxiL2f9q
只是为了减少你的理解时间 - 该项目是一个epub读者.XMLHandler是从另一个未显示的类中的SAX解析器调用的.对于3种不同的XML集,XMLHandler使用了3次不同的时间,因此存在一些混乱.
问题在于'toc'ArrayList.'toc'或TableOfContents保存稍后要引用的Contents实例(未显示).我试图传递数据'Content'的每个新实例,然后将其传递给静态ArrayList
Ern*_*ill 19
我已经看到人们多次报告这种问题了,它总是归结为:你实际上并没有创建一个新实例,而是在循环的每次迭代中使用相同的实例.这是一个容易犯的错误,特别是如果你来自一种具有不同复制语义的语言.你可以通过多种不同的方式犯这个错误; 如果您编辑问题以显示循环代码,我相信我能够解释发生了什么.
好的,既然您已经添加了代码:问题是在"内容"中,所有数据成员都标记为"静态".在Java中,这意味着所有对象共享一个变量 - 即,变量对于每个对象具有相同的值.事实上,您正在创建许多要放入ArrayList的Content对象,但它们看起来都一样!从Content的数据成员中删除那些"静态"属性,您将全部设置完毕.
卢声远*_* Lu 12
ArrayList只存储元素的引用.确保您的代码如下所示:
ArrayList list = new ArrayList<>();
loop(...) {
MyObject newOne = new MyObject();
newOne.setXXX(xxx);
list.add(newOne);
}
Run Code Online (Sandbox Code Playgroud)
错误的代码:
ArrayList list = new ArrayList<>();
MyObject sameOne = new MyObject();
loop(...) {
sameOne.setXXX(xxx);
list.add(sameOne);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17246 次 |
| 最近记录: |