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();
}
}