我可以在不修改类本身的情况下复制Java中的对象(比如添加复制构造函数)吗?

时间:2018-06-17 11:49:02

标签: java copy-constructor

在我的项目中,我使用外部库中的对象,我需要复制此对象,但我无法修改库中的类。我怎么能这样做?

这是我必须复制的对象的类:

public class Tree<T> implements Iterable<Tree<T>> {
    private List<Tree<T>> children;
    private T value;
    private Tree<T> tree = this;

     ... 
    }

2 个答案:

答案 0 :(得分:2)

您可以扩展该类,根据需要实现您的特定对象,您可以添加其他功能。

答案 1 :(得分:1)

如果班级没有实施Cloneable,那么这是一个很好的方法。

可接受的方法就是编写一个实用工具方法来手动复制类,但这可以让你对它的内部结构有所了解。

例如,您可以按如下方式执行浅拷贝:

T newTree = new T();
for (T t : tree) {
    newTree.add(t);
}

但是因为你的班级包含子树,所以不会复制那些;它只是一个浅层副本(新树将包含对旧树中子树的引用)。

对于深层复制,您还必须递归复制子树。我不太了解你的类的结构,为它编写代码。