我对 Java 中的复制构造有疑问。考虑以下课程;
在复制构造函数中,我可以说 new(Integer(other.id)) 来获取传递给构造函数的新整数对象,但我不能说 new T(other.data) 因为编译器会说无法实例化类型T. 我如何确保当通用项目被复制构造时,它不会只传递一个引用,这样 2 个对象将共享基础数据。
此外,在 getLinks 方法中,它正在执行一个新对象并创建列表的新对象,但它是深度复制并创建列表中包含的项目的新对象,还是仅包含对现有对象列表项目的引用,例如你有 2 个列表都指向相同的数据。请参阅下面的评论/代码。提前感谢您的专业知识。
class DigraphNode<T>
{
Integer id;
T data;
ArrayList<DigraphNode<T> > links;
public DigraphNode(Integer i)
{
id = i;
links = new ArrayList<DigraphNode<T> >();
}
public DigraphNode(Integer i, T d)
{
id = i; data = d;
links = new ArrayList<DigraphNode<T> >();
}
public DigraphNode(DigraphNode<T> other)
{
other.id = new Integer(other.id);
other.data = other.data; // line in question
this.links=other.getLinks(); // also will create a new list with references
// or will it deep copy the items contained in the list?
// see getLinks() method below
}
public void setData (T d ) { data = d; }
public void addLink (DigraphNode<T> n) { links.add(n); }
public void addLinks (ArrayList<DigraphNode<T> > ns) { links.addAll(ns); }
public ArrayList<DigraphNode<T> > getLinks()
{
return new ArrayList<DigraphNode<T> >(links);
}
public void printNode()
{
System.out.print("Id: " + id + " links: ");
for ( DigraphNode<T> i : links )
{
System.out.print(i.id + " ");
}
System.out.println();
}
}