什么时候需要clone()方法?

时间:2015-03-10 06:22:47

标签: java clone

考虑以下代码:

ArrayList<Double> list1 = new ArrayList<>();
list1.add(1.5);
list1.add(2.5);
list1.add(3.5);
ArrayList<Double> list2 = (ArrayList<Double>)list1.clone();

Date[] list3 = {new Date(), new Date(4664316)};
Date[] list4 = list3.clone();

int[] list5 = {1, 2};
int[] list6 = list5.clone();

为什么list.clone()需要强制转换,而list3.clone()和list5.clone()不需要强制转换?我知道数组和ArrayList之间的区别,但不确定原因。

2 个答案:

答案 0 :(得分:3)

请阅读documentation

  

请注意,所有数组都被认为实现了Cloneable接口,并且数组类型T []的clone方法的返回类型是T [],其中T是任何引用或基本类型。

但是在ArrayList中,返回一个Object,因此需要进行强制转换。

答案 1 :(得分:0)

Clone()方法签名返回一个对象类型。

  

按照惯例,此方法返回的对象应独立于此对象(正在克隆)

因此演员阵容是必需的。

数组行为不同,返回正确类型的克隆数组。所以不需要铸造。