我有一个程序,用于加载原始数据以进行制图,并将其存储在名为cRawGraph
的类中。然后,它将此数据格式化并将其存储在另一个名为cFormatGraph
的类中。有没有办法将cRwGraph
中存储的一些日期对象复制到cFormattedGraph
中存储的日期对象而不使用引用?我查看了Oracle的文档,并没有看到一个构造函数会接受一个日期对象,或者任何方法数据都会实现这一点。
代码段:
do{
d=rawData.mDate[i].getDay();
da=rawData.mDate[i];
datept=i;
do{
vol+=rawData.mVol[i];
pt+=rawData.mPt[i];
c++;
i++;
if (i>=rawData.getSize())
break;
} while(d==rawData.mDate[i].getDay());
// this IS NOT WORKING BECOUSE IT IS A REFRENCE AND RawData gets loaded with new dates,
// Thus chnaging the value in mDate
mDate[ii]=da;
mVol[ii]=vol;
mPt[ii]=pt/c;
if (first)
{
smallest=biggest=pt/c;
first=false;
}
else
{
double temp=pt/c;
if (temp<smallest)
smallest=temp;
if (temp>biggest)
biggest=temp;
}
ii++;
} while(i<rawData.getSize());
答案 0 :(得分:29)
您可以使用getTime()并将其传递给Date(time)构造函数。这只是必需的,因为Date是可变的。
Date original = new Date();
Date copy = new Date(original.getTime());
如果您使用的是Java 8,请尝试使用使用java.time API的新immutable objects。所以不需要复制/克隆。
答案 1 :(得分:6)
使用 Java 8 ,您可以使用以下nullsafe代码。
Optional.ofNullable(oldDate)
.map(Date::getTime)
.map(Date::new)
.orElse(null)
答案 2 :(得分:3)
如果可能,请尝试切换到使用Joda Time而不是内置日期类型。
http://www.joda.org/joda-time/
Joda的DateTime有一个复制构造函数,由于DateTime不可变,因此通常更好用。
否则你可以尝试:
Date newDate = new Date(oldDate.getTime());