我有下面的代碼有問題:列表存儲最後附加值只有
首先我有一個內部類:
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));
,其中溫度是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();
}
如果'temp'已經是'TraceMessage'對象,爲什麼不直接將它添加到你的'messages'列表?:'messages.add(temp)' – maqjav
這個問題很可能是你沒有顯示我們在這裏真正的代碼,你實際上多次添加相同的對象。你能向我們展示一個能夠再現問題的自包含測試嗎? –
你總是得到相同的物體溫度。 – chetan