次のコードに問題があります。
まず第一に、私は内部クラスを持っています:
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 属性のゲッターとセッターがあります。私の問題は次のとおりです。
このメッセージのリストがあります:
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();
}