非常にシンプルなものがあるかもしれませんが、基本的にはarrayList
というグローバルに格納したいオブジェクトがあります。しかし、私が関数を残して、同じarrayList
のオブジェクト要素にアクセスしようとすると、フィールドが上書きされていて、わかりません。ArrayListを使用しているときにオブジェクトフィールドが上書きされる[デバッグヘルプ]
問題を特定の地域に限定し、関連するコードを表示します。日付(timeSlot
\ Calendar
)オブジェクトがこの問題のインジケータです。
requestHandler(){
Pattern pattern = Pattern.compile("*irrelevant regex*");
Matcher matcher = pattern.matcher(element);
while(matcher.find()) {
int requestID = Integer.parseInt(matcher.group(1));
Calendar startDate = dateHandler(matcher.group(2));
Calendar endDate = dateHandler(matcher.group(3));
TimeSlot timeSlot = generateTimeSlot(startDate, endDate);
TransmissionRequest t_Request = transmissionHandler(matcher.group(4));
BookingRequest request = new BookingRequest(requestID, timeSlot, t_Request);
requestList.add(request);
// debug //
System.out.println(request);
}
}
デバッグの目的のために、私は出力文を最後に追加しました。正しい出力が得られます。基本的にtimeSlot
をそれぞれBookingRequest
の文字列として出力します。正しいtimeSlot
の値を持つrequest
オブジェクトは、requestList
に追加されています。
OUTPUT(私は無関係なフィールドを残している)
BookingRequest:1
Date= 11:00 Mar-25 to 12:00 Mar-26
BookingRequest:2
Date= 12:00 Mar-24 to 03:00 Mar-27
BookingRequest:3
Date= 01:00 Mar-26 to 09:00 Mar-26
BookingRequest:4
Date= 11:00 Mar-25 to 09:00 Mar-26
BookingRequest:5
Date= 11:00 Mar-26 to 09:00 Mar-27
しかし、できるだけ早く私は、この機能を残し、ArrayListのrequestList
を経由して、このまったく同じ出力を印刷しようとして、私は次のように取得します。
OUTPUT
BookingRequest:1
Date= 11:00 Mar-26 to 09:00 Mar-27
BookingRequest:2
Date= 11:00 Mar-26 to 09:00 Mar-27
BookingRequest:3
Date= 11:00 Mar-26 to 09:00 Mar-27
BookingRequest:4
Date= 11:00 Mar-26 to 09:00 Mar-27
BookingRequest:5
Date= 11:00 Mar-26 to 09:00 Mar-27
各timeSlot
オブジェクトが処理される非常に最後timeSlot
オブジェクトによって上書きされていることが表示されます。私は配列に何も修正を加えておらず、requestHandler()
が呼び出された直後にこの出力を得るようにしました。以下のコード。ここで
for(String element : input){
// Extract requests
if(element.matches("^Request.*")){
requestHandler(element);
}
}
for(BookingRequest request : requestList){
System.out.println(request);
}
あなたは問題がそこにあると信じていた場合にも、関連するhandler
とgenerate
機能です。両方ともTimeSlot
とCalendar
の新しいインスタンスを作成するので、同じインスタンスの再割り当てに問題はないと思います。
public static Calendar dateHandler(String stringExtract){
Calendar date = new GregorianCalendar();
SimpleDateFormat format = new SimpleDateFormat("HH MMM dd", Locale.ENGLISH);
try {
date.setTime(format.parse(stringExtract));
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static TimeSlot generateTimeSlot(Calendar start, Calendar end){
TimeSlot newTimeSlot = new TimeSlot(start, end);
return newTimeSlot;
}
私は、正確な問題が何であるかを理解するのに非常に時間をかけました。 matcher.find()
の動作と関係があるかもしれないという気持ちがありますが、文字通り、正確な問題だけでは解決できないことを特定するためにすべてを試しています。
ご協力いただければ幸いです。
あなたのご意見をお待ちしています。 –
あなたのBookingRequest pojoを共有できますか? – Alekhya
申し訳ありませんが、私はこれらのコメントの前に返信できませんでした、眠りに落ちました。 –