请考虑以下代码:
DummyBean dum = new DummyBean();
dum.setDummy("foo");
System.out.println(dum.getDummy()); // prints 'foo'
DummyBean dumtwo = dum;
System.out.println(dumtwo.getDummy()); // prints 'foo'
dum.setDummy("bar");
System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'
Run Code Online (Sandbox Code Playgroud)
所以,我想复制dum到dumtwo并更改dum而不影响dumtwo.但上面的代码并没有这样做.当我改变某些内容时dum,也会发生同样的变化dumtwo.
我想,当我说dumtwo = dum,Java 只复制引用.那么,有没有办法创建一个新的副本dum并分配给它dumtwo?
最佳做法是不公开Object(Entity)的内部引用.因此,如果一个Object有一个类型的字段,java.util.Date那么例如该字段的getter应该不返回原始日期而是它的副本.
但是对于java.util.Date,有两种常见的方法来创建该副本:
(Date) originalDate.clone()new Date(originalDate.getTime()) 我的问题是,哪种方式更好,为什么?
我想使用构造函数制作对象数组的深层副本.
public class PositionList {
private Position[] data = new Position[0];
public PositionList(PositionList other, boolean deepCopy) {
if (deepCopy){
size=other.getSize();
data=new Position[other.data.length];
for (int i=0;i<data.length;i++){
data[i]=other.data[i];
}
Run Code Online (Sandbox Code Playgroud)
但是,由于某种原因,我上面所说的不起作用.我有运行的自动化测试,并且它没有通过这些测试.所以这里有一个错误,我不确定它是什么.
我的代码中有以下内容:但是为什么会出现声纳错误?错误在线:this.lastAccessTime = lastAccessTime;此处的日期已声明为私有。
public class myClass{
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_ACCESS_TIME", nullable = false)
private Date lastAccessTime;
/**
* Constructor
*
* @param userId the user id
* @param screenName the name of screen
* @param lastAccessTime time of last access
*/
public userTO(String userId, String screenName, Date lastAccessTime)
{
this.userId = userId;
this.screenName = screenName;
this.lastAccessTime = lastAccessTime;
}
}
Run Code Online (Sandbox Code Playgroud)