我正在尝试创建一个克隆方法和复制构造函数来创建Doubly Linked列表的深层副本,但是我得到了一些我似乎无法弄清楚的编译器错误。特别是在copyOf方法中,我用它来帮助创建深拷贝,用于行:
newHead = new TwoWayNode<T>((T)(position.data).clone(), null, null);
编译器说clone()在Object中具有受保护的访问权限。第二个问题来自这一行:
end.next = new TwoWayNode<T>((T)(position.data).clone(), head, null));
对于此错误,我收到与上面相同的消息,但我也看到应该有一个&#39 ;;&#39;预期,这对我没有意义。任何人都对我可能做错了什么有任何见解?
public DoublyLinkedList(DoublyLinkedList<T> otherList)
{
if (otherList == null)
throw new NullPointerException();
if (otherList.head == null)
head = null;
else
head = copyOf(otherList.head);
}
public DoublyLinkedList<T> clone()
{
try
{
DoublyLinkedList<T> copy = (DoublyLinkedList<T>)super.clone();
if (head == null)
copy.head = null;
else
copy.head = copyOf(head);
return copy;
}
catch(CloneNotSupportedException e) //should not happen
{
return null;
}
}
private TwoWayNode<T> copyOf(TwoWayNode<T> otherHead)
{
TwoWayNode<T> position = otherHead;
TwoWayNode<T> newHead;
TwoWayNode<T> end = null;
try
{
newHead = new TwoWayNode<T>((T)(position.data).clone(), null, null);
end = newHead;
position = position.next;
while (position != null)
{
end.next = new TwoWayNode<T>((T)(position.data).clone(), head, null);
end = end.next;
position = position.next;
}
return newHead;
}
catch(CloneNotSupportedException e)
{
return null;
}
}
编辑括号问题已得到纠正,但我仍然无法使用clone()的受保护访问权限。我的演示文件带来错误的部分现在看起来像这样:
System.out.println("Initializing copy constructor");
DoublyLinkedList list2 = new DoublyLinkedList(list1);
DoublyLinkedList.DoublyLinkedIterator j = list2.iterator();
System.out.println("list2 contains:");
j.restart();
while (j.hasNext())
System.out.println(j.next());
System.out.println("");
答案 0 :(得分:0)
您有更多的右括号,因此如果您要删除一个问题,我们会修复;
问题。
end.next = new TwoWayNode<T>((T)(position.data).clone(), head, null);
对于另一个,只需替换此行
newHead = new TwoWayNode<T>((T)(position.data).clone(), null, null);
这个。
newHead = new TwoWayNode<T>((T)((T)position.data).clone(), null, null);
这将阻止它访问Object
类的clone()方法,并将使用clone()