java - Java 中泛型的深拷贝

标签 java generics clone generic-programming

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

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

最佳答案

答案是否定的。因为没有办法在编译期间找出哪个类将替换您的通用类型 E,除非您 Bind it to a type .

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

关于java - Java 中泛型的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16436591/

相关文章:

java - 我应该使用什么 Swing 组件来显示歌曲列表和歌曲属性?

java - Minecraft Bukkit - 如何使用元素实体和掉落的方 block 实体作为射弹?

java - AspectJ - 匹配具有通用参数的方法的切入点

c# - 在 C# 中创建结构的浅拷贝

C#克隆一个交叉引用列表

java - 如何使用 Java 在 SAML 2.0 中的签名下添加 KeyInfo 和 X509Data

java - 如何使用 AM/PM 读取/获取 TimePicker 值?

c# - 如何对 <TEntity> 未知动态通用列表进行排序?

java - 在参数化类型上使用绑定(bind)

c# - 如何复制/克隆数据表