java泛型如何深复制,如何使用通配符在Java中复制泛型集合
时间: 2024-02-28 09:54:21 浏览: 81
Java中可以通过序列化和反序列化来实现泛型深复制。具体步骤如下:
1. 定义一个实现Serializable接口的深复制工具类,如下所示:
```
public class DeepCopyUtils {
public static <T extends Serializable> T deepCopy(T obj) throws IOException, ClassNotFoundException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return (T) ois.readObject();
}
}
```
2. 在需要进行深复制的泛型对象中实现Serializable接口,如下所示:
```
public class SomeClass<T> implements Serializable {
private T data;
// 构造函数和其他方法省略...
// getter和setter方法省略...
@Override
protected Object clone() throws CloneNotSupportedException {
try {
return DeepCopyUtils.deepCopy(this);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
}
```
3. 使用通配符在Java中复制泛型集合,如下所示:
```
List<? extends SomeClass<?>> list = new ArrayList<>();
List<? extends SomeClass<?>> newList = new ArrayList<>(list);
```
这里的`?`通配符表示可以接受任意类型的SomeClass对象,使用通配符可以避免类型转换的问题。使用`new ArrayList<>(list)`可以创建一个新的泛型集合,并将原集合中的元素复制到新集合中。
阅读全文