我有一个要向其中添加对象的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));

08-06 00:28