当使用ArrayList时,对象字段被覆盖 [调试帮助]
可能有一些非常简单的东西,我在这里丢失了,但基本上我有我想要存储在全局的arrayList
中的对象。但是,当我离开函数,并尝试访问这个相同的对象元素时,一个字段被覆盖,我不知道如何。当使用ArrayList时,对象字段被覆盖<E> [调试帮助]
我已经确定问题到一个特定的区域,并会显示相关的代码。日期(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
的字符串。所以很明显request
对象与正确的timeSlot
值正被添加到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
打印此完全相同的输出,我得到以下。
输出
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.timeSlot
或TimeSlot
本身。
omg。我不相信。我在我的'BookingRequest'构造函数中有一个静态变量,并且我很确定我没有在自己中输入它,但是eclipse有一个快速修复选项,使它如此,我从来没有注意到它。非常感谢! –
非常感谢您的意见。 –
你能分享你的BookingRequest pojo吗? – Alekhya
对不起,我不能早些回复这些评论,睡着了。 –