我发现我可以做到以下几点:
package test.java.lang;
import java.util.Arrays;
public class Tester_ArrayCloning_01 {
public static void main(String[] args) {
double[] vals1 = {1.2, 2.3, 3.4, 4.5};
double[] vals2;
// vals2 = (double[])vals1.clone(); // was thinking should do so
vals2 = vals1.clone(); // but happened can do so
System.out.println(Arrays.toString(vals2));
}
}为什么?它是什么时候推出的?
发布于 2013-03-19 21:38:18
来自section 10.7 of the JLS, array members
数组类型的成员如下所示:
..。
clone,它覆盖类对象中具有相同名称的方法,并且不抛出检查异常。数组类型T[]的克隆方法的返回类型为T[]。same section in the third edition具有相同的内容。
second edition说数组类型覆盖了clone(),但在这一点上没有返回类型协方差,所以他们不可能返回T[]。
所以基本上它是在1.5中引入的。
发布于 2013-03-19 21:39:44
T[]类型的数组的clone方法的返回类型为T[]。由于Object.clone()返回Object,这样定义需要协变的返回类型,这是在Java5中引入的。
Previously,clone被定义为返回Object。这尤其是协变返回类型有什么好处的问题,
发布于 2013-03-19 21:39:47
Java5引入了协变返回类型,它允许任何代码(包括您自己的)利用它们。常规功能允许重写方法声明作为原始返回类型的子类型的返回类型。请注意,您的变量的声明类型必须是正确的,才能正常工作。例如,以下代码无法编译:
Object vals1 = {1.2, 2.3, 3.4, 4.5};
double[] vals2;
vals2 = vals1.clone();https://stackoverflow.com/questions/15501032
复制相似问题