6

泛型类型的深拷贝(克隆)如何T, E在 Java 中工作?可能吗?

E oldItem;
E newItem = olditem.clone(); // does not work
4

1 回答 1

3

答案是不。E因为在编译期间无法找出哪个类将替换您的泛型类型,除非您将它绑定到一个类型

Java的克隆方式比较浅,深度克隆需要自己提供实现

解决方法是创建这样的合同

public interface DeepCloneable {
    Object deepClone();
}

并且实现者应该有自己的深度克隆逻辑

class YourDeepCloneClass implements DeepCloneable {

    @Override
    public Object deepClone() {
        // logic to do deep-clone
        return new YourDeepCloneClass();
    }

}

它可以像下面这样调用,其中泛型类型E是有界类型

class Test<E extends DeepCloneable> {

    public void testDeepClone(E arg) {
        E e = (E) arg.deepClone();
    }
}
于 2013-05-08T09:21:52.950 回答