如何在java中创建深度副本

如何在java中创建深度副本,java,deep-copy,Java,Deep Copy,我的问题是如何用java制作深度拷贝。 现在这是我的代码,但我不认为这是正确的 @Override public ListInterface<E> copy() { ListerInterface<E> temp = new List<E>(); if (isEmpty()) { return null; } else { goToFirst(); do { t

我的问题是如何用java制作深度拷贝。 现在这是我的代码,但我不认为这是正确的

@Override
public ListInterface<E> copy() {
    ListerInterface<E> temp = new List<E>();

    if (isEmpty()) {
        return null;
    } else {
        goToFirst();

        do {
            temp.inset(retrieve());
        } while (currentNode.next != null);

        currentNode = currentNode.next;
    }

    return temp;
}
@覆盖
公共列表接口副本(){
ListerInterface temp=新列表();
if(isEmpty()){
返回null;
}否则{
goToFirst();
做{
临时插入(检索());
}while(currentNode.next!=null);
currentNode=currentNode.next;
}
返回温度;
}

那么,有人知道我应该在代码中修改什么才能得到正确的深度副本吗

下面的代码复制了一个列表,其中可能包含作为引用对象的其他列表:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(final String[] args) {
        final ArrayList list = new ArrayList();
        list.add(Arrays.asList("A", "B", "C"));
        list.add("D");
        System.out.println(list);
        final ArrayList out = new ArrayList();
        deepCopy(out, list);
        System.out.println(out);
    }

    public static void deepCopy(final List out,
                                final List in) {
        for (Object o: in)
            if (o instanceof List) {
                final ArrayList copy = new ArrayList();
                deepCopy(copy, (List)o);
                out.add(copy);
            }
            else
                out.add(o);
    }
}
编辑:

如果要克隆引用的对象,必须访问引用对象的方法。

请添加一个示例。因为这是你的第一个问题,你可能会读到。关于引用中的对象:你需要克隆它们吗?Maybee咨询方法?可能的重复。谢谢你,是的,我确实需要克隆整个列表。你需要克隆引用的对象吗?如果是,那么您需要一般参考还是具体参考?因为如果你是泛型的,那么你必须访问克隆方法。我需要一个泛型引用,我刚刚发现我在程序中忘记了克隆方法