org.apache.cxf.jaxrs.ext.multipart.Attachment attachments=null;
List<Attachment> clone = new ArrayList<Attachment>(attachments.size());
for(Object item: attachments)
clone.add((Attachment)item.clone());//The method clone() from the type Object is not visible
我想克隆List<Attachment> clone
对象,但它说的是Object类型的方法clone()不可见
答案 0 :(得分:5)
请勿使用clone
中的Java标准Object
方法。至少在你阅读Josh Bloch在他的书Effective Java中所说的关于克隆的内容之前。
在这种情况下,您需要执行深层复制,即创建一个空ArrayList
个Attachment
个对象(您做过)并复制值每个Attachment
对象的所有字段中的strong>。
答案 1 :(得分:0)
深度克隆样本
public static Object deepClone(Object model) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(model);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
}
catch (IOException e) { .. }
catch (ClassNotFoundException e) { .. }
finally { /*close stream*/ }
}
答案 2 :(得分:0)
clone.add((Attachment)item.clone());//The method clone() from the type Object is not visible
此代码的实际问题是运算符优先级问题。假设实际对象是可复制的,并且暂时忽略了你是否应该克隆它的问题,那么应该写出来:
clone.add((Attachment)((Attachment)item).clone());
答案 3 :(得分:0)
将最后一行替换为:
clone.add(((Attachment)item).clone());
确保Attachment
实现了界面Cloneable