【发布时间】:2019-07-22 14:14:29
【问题描述】:
我想做以下事情:
我有一个包含对象的列表,其中包含一个日期,现在我想不仅将这个对象用于一个日期,我还想设置日期并重用它们。选定列表包含 5 个元素。
while((stop.equals(countingDate)) || (countingDate.before(stop))) {
for (c_TakeTimeObjects c_takeTimeObjects : SelectedList) {
c_TakeTimeObjects addingObj = new c_TakeTimeObjects(1,1,"",true,this);
c_takeTimeObjects.setsActivityDate(c_HelperClass_CalToStringDate.get(countingDate, 0, 0, 0));
addingObj = c_takeTimeObjects;
Log.i(TAG, "adjustDateRange: "+ addingObj.getsActivityDate());
editList.add(addingObj);
}
countingDate.add(Calendar.DAY_OF_MONTH, +1);
}
正如您可能猜到的那样,日志显示由循环引起的不同日期,但最终列表仅包含具有相同日期的元素。
log.i 给我:
adjustDateRange: 25.06.2019
adjustDateRange: 25.06.2019
adjustDateRange: 25.06.2019
adjustDateRange: 25.06.2019
adjustDateRange: 25.06.2019
adjustDateRange: 26.06.2019
adjustDateRange: 26.06.2019
adjustDateRange: 26.06.2019
adjustDateRange: 26.06.2019
adjustDateRange: 26.06.2019
adjustDateRange: 27.06.2019
adjustDateRange: 27.06.2019
adjustDateRange: 27.06.2019
adjustDateRange: 27.06.2019
adjustDateRange: 27.06.2019
adjustDateRange: 28.06.2019
adjustDateRange: 28.06.2019
adjustDateRange: 28.06.2019
adjustDateRange: 28.06.2019
adjustDateRange: 28.06.2019
并在添加所有对象后遍历列表给我:
for(c_TakeTimeObjects c_takeTimeObjects: editList){
Log.i(TAG, "EditList: " + c_takeTimeObjects.getsActivityDate());
}
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
EditList: 28.06.2019
这是,因为我添加的对象之间存在引用,如何避免这种情况?也许一种解决方案是 DeepCopy,但这真的有必要吗?
更新
此代码产生相同的结果:
while((stop.equals(countingDate)) || (countingDate.before(stop))) {
for (c_TakeTimeObjects c_takeTimeObjects : SelectedList) {
c_takeTimeObjects.setsActivityDate(c_HelperClass_CalToStringDate.get(countingDate,0,0,0));
Log.i(TAG, "adjustDateRange: "+ c_takeTimeObjects.getsActivityDate());
editList.add(c_takeTimeObjects);
}
countingDate.add(Calendar.DAY_OF_MONTH, +1);
}
【问题讨论】:
-
您确定
SelectedList包含不同的对象而不仅仅是对单个对象的多个引用吗?请在编写代码时牢记 Java 代码指南。 -
SelectedList 包含
c_TakeTimeObjects类的对象,它们都分配了不同的值。比如开始和停止时间或状态。在我的示例中 SelectedList 有 5 个对象。 -
我添加了完整的 Log.i。 SelectedList 有 5 个元素