首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么没有类型转换就可以克隆数组?

问为什么没有类型转换就可以克隆数组?
EN

Stack Overflow用户
提问于 2013-03-19 21:35:58
回答 3查看 287关注 0票数 4

我发现我可以做到以下几点:

代码语言:javascript
复制
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));
        }

    }

为什么?它是什么时候推出的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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中引入的。

票数 9
EN

Stack Overflow用户

发布于 2013-03-19 21:39:44

T[]类型的数组的clone方法的返回类型为T[]。由于Object.clone()返回Object,这样定义需要协变的返回类型,这是在Java5中引入的。

Previously,clone被定义为返回Object。这尤其是协变返回类型有什么好处的问题,

票数 3
EN

Stack Overflow用户

发布于 2013-03-19 21:39:47

Java5引入了协变返回类型,它允许任何代码(包括您自己的)利用它们。常规功能允许重写方法声明作为原始返回类型的子类型的返回类型。请注意,您的变量的声明类型必须是正确的,才能正常工作。例如,以下代码无法编译:

代码语言:javascript
复制
Object vals1 = {1.2, 2.3, 3.4, 4.5};
double[] vals2;
vals2 = vals1.clone();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15501032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档