我对以下代码有疑问:
首先我有一个内部类:
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 对象。
所以我的问题是,当我将这样的消息类型对象添加到列表时,值很好,我什至将打印输出到构造函数,它也显示了良好的价值。但后来当我尝试使用该列表时,列表的所有元素都具有相同的内容(最后一个)。可能是什么问题呢?
这是我添加消息的完整部分:
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();
}