我正在尝试克隆可克隆对象的列表:
public static <T extends Cloneable> List<T> cloneList(List<T> list)
{
List<T> out = new ArrayList<T>();
for(int i=0;i<list.size();i++)
{
out.add((T)((T)list.get(i)).clone());
}
return out;
}这会抛出错误:
Helpers.java:40: error: cannot find symbol
out.add((T)((T)list.get(i)).clone());
^
symbol: method clone()
location: interface Cloneable为什么;clone()不就是Cloneable接口的唯一方法吗?
发布于 2016-06-20 15:05:33
clone()在默认情况下是受保护的,您是否可以将其重写为public
发布于 2016-06-20 15:07:22
clone是一个marker接口,clone()方法在Object类中,因此您应该根据自己的需要覆盖类中的clone()方法,并且还必须实现cloneable接口来告诉JVM该对象是可克隆的。Cloneable接口的工作原理类似于Serializable接口,后者用于序列化。
发布于 2016-06-20 15:03:58
您需要实现Cloneable并覆盖clone()才能使用它(将其设为public,它是Object类中的protected )。
https://stackoverflow.com/questions/37916357
复制相似问题