Mic*_*ner 6 java generics clone generic-programming
泛型类型的深层副本(克隆)如何T, E在Java中工作?可能吗?
E oldItem;
E newItem = olditem.clone(); // does not work
Run Code Online (Sandbox Code Playgroud)
答案是不。E因为在编译时无法找出哪个类将替换您的泛型类型,除非您将其绑定到类型。
Java的克隆方式是浅层的,对于深层克隆,我们需要提供自己的实现
解决方法是创建一个像这样的合同
public interface DeepCloneable {
Object deepClone();
}
Run Code Online (Sandbox Code Playgroud)
并且实现者应该有自己的深度克隆逻辑
class YourDeepCloneClass implements DeepCloneable {
@Override
public Object deepClone() {
// logic to do deep-clone
return new YourDeepCloneClass();
}
}
Run Code Online (Sandbox Code Playgroud)
可以像下面这样调用,其中泛型类型E是有界类型
class Test<E extends DeepCloneable> {
public void testDeepClone(E arg) {
E e = (E) arg.deepClone();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6346 次 |
| 最近记录: |