我有一个要向其中添加对象的ArrayList。通过使用文本框添加对象。
我遇到的问题是,当用户在文本框中输入值时,ArrayList中的所有条目都采用新值。
if(e.getSource() == textbox){
String name = textbox.getText();
NameSurferEntry entry = new NameSurferEntry();
entry = db.findEntry(name);
graph.addEntry(entry);
graph.update();
textbox.setText("");
}
添加条目的代码:
public void addEntry(NameSurferEntry entry) {
entryArray.add(entry);
}
最佳答案
您正在创建一个新的NameSurferEntry
,下一行将用数据库中的值覆盖它。如果返回的条目始终相同,则您的arraylist将仅包含对同一对象的引用。
NameSurferEntry entry = new NameSurferEntry();
entry = db.findEntry(name);
您应该考虑的是尝试在对象中实现immutability和/或执行防御性复制。对于简单的属性,只需声明
final
就足够了,但是对于复杂的元素,通常需要通过重新创建对象来复制对象。鉴于您实现了copy constructor,以下示例应该为您工作
NameSurferEntry copy = new NameSurferEntry(db.findEntry(name));