Java 为什么添加到我的ArrayList中的新元素会覆盖所有以前的值?
我从数据库中检索值,创建一个新的事务对象并将其添加到ArrayList中,然后返回 问题是每次returnList.addt;调用,而不仅仅是添加事务,它还用新事务替换所有旧事务 导致这种行为的错误在哪里Java 为什么添加到我的ArrayList中的新元素会覆盖所有以前的值?,java,arraylist,Java,Arraylist,我从数据库中检索值,创建一个新的事务对象并将其添加到ArrayList中,然后返回 问题是每次returnList.addt;调用,而不仅仅是添加事务,它还用新事务替换所有旧事务 导致这种行为的错误在哪里 public ArrayList<Transaction> getTransactions(long intervall, Map<String, String> transactionFields) { connect(); ArrayList<
public ArrayList<Transaction> getTransactions(long intervall, Map<String, String> transactionFields) {
connect();
ArrayList<Transaction> returnList = new ArrayList<Transaction>();
Statement sta;
ZonedDateTime now = ZonedDateTime.now(ZoneOffset.UTC);
now = now.minusSeconds(intervall);
try {
sta = conn.createStatement();
String Sql = "...";
ResultSet rs = sta.executeQuery(Sql);
while (rs.next()) {
Transaction t = new Transaction(rs.getString("No"), transactionFields);
t.set("AgentName", rs.getString("cname"));
returnList.add(t);
}
} catch (SQLException e) {
...
}
disconnect();
return returnList;
}
以下是事务类:
public class Transaction {
private Map<String, String> fields;
public Transaction(String number, Map<String, String> transactionFields) {
fields = transactionFields;
fields.put("Number", number);
}
public void set(String field, String value) {
fields.put(field, value);
}
public String get(String field) {
return fields.get(field);
}
public Map<String, String> getFieldMap() {
return fields;
}
@Override
public String toString() {
return fields.toString();
您在所有事务实例中使用相同的映射
而是每次传入一个新的:
Transaction t = new Transaction(rs.getString("No"), new HashMap<String, String>());
或者只是在事务类中创建映射。作为补充,如果在构造函数中进行防御复制,则getFieldMap中也应该有防御复制。是的,只需要传递transactionFields的deepcopy。谢谢。我建议您在调试器中逐步执行代码,因为我怀疑这不是正在发生的事情。