gpt4 book ai didi

java - 列表仅存储最后添加的值

转载 作者:行者123 更新时间:2023-11-29 09:01:02 25 4
gpt4 key购买 nike

我对以下代码有疑问:

首先我有一个内部类:

public class TraceMessage{
private String messageType;
private String tracedIdentifier;
private List<String> content;



TraceMessage(){
content = new ArrayList<String>();
messageType="";
tracedIdentifier="";
}

TraceMessage(String messageType, String identifier ,List<String> content){
this.messageType = messageType;
this.tracedIdentifier = identifier;
this.content = content;
}

它具有 3 属性的 getter 和 setter。我的问题是:

我有一个消息列表:

private List<TraceMessage> messages = new ArrayList<TraceMessage>();

我正在尝试向其中添加新元素:

messages.add(new TraceMessage(temp.messageType,temp.tracedIdentifier,temp.content));

其中 temp 是一个 TraceMessage 对象。

所以我的问题是,当我将这样的消息类型对象添加到列表时,值很好,我什至将打印输出到构造函数,它也显示了良好的值(value)。但是后来当我尝试使用该列表时,列表的所有元素都具有相同的内容(最后一个)。可能是什么问题?

这是我添加消息的完整部分:

String fileName="tracefile.MTR";
BufferedReader br = new BufferedReader(new FileReader(fileName));
try {
String line;
TraceMessage temp = new TraceMessage();
while ((line=br.readLine()) != null) {
if(line.contains("MSCi")){
temp.content.clear();
temp.content.add(line);
}
else if(line.contains("CALL PHASE")){
temp.messageType = line.substring(60);
temp.content.add(line);
}

else if(line.contains("CALL ID")){
temp.tracedIdentifier = line.substring(22);
temp.content.add(line);
}
else if(line.contains("END OF REPORT")){
temp.content.add(line);
messages.add(new TraceMessage(temp.messageType,temp.tracedIdentifier,temp.content));
}
else{
temp.content.add(line);
}


}

} finally {
br.close();



}

最佳答案

我会重写第二个构造函数来获取列表的副本

TraceMessage(String messageType, String identifier ,List<String> content){
this.messageType = messageType;
this.tracedIdentifier = identifier;
this.content = new ArrayList<String>(content);
}

这将复制您在 while 循环中重用的 temp.content。实例不会受到在类外执行的内容集合操作的影响。

关于java - 列表仅存储最后添加的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17419220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com