java - Object.clone() 不应该需要显式转换吗?

标签 java clone

为什么不需要 Object.clone() 调用需要显式转换?这不是“向下转换总是需要和显式转换”规则的异常(exception)吗?我使用 javac 命令行和带有 JDK1.6.0_29 的 Eclipse Helios 编译并成功运行了以下代码。

public class Main {

    public static void main(String[] args) {
        byte[] original = { 1, 2, 3, 4 };
        byte[] copy = original.clone();

        for (byte b : copy) {
            System.out.print(b + " ");
        }

        int[] originalInt = { 11, 22, 33, 44 };
        int[] copyInt = originalInt.clone();

        for (int i : copyInt) {
            System.out.print(i + " ");
        }

        String[] originalStr = { "1", "2", "3", "4" };
        String[] copyStr = originalStr.clone();

        for (String s : copyStr) {
            System.out.print(s + " ");
        }

        Main[] originalMain = { new Main() };
        Main[] copyMain = originalMain.clone();

        for (Main m : copyMain) {
            System.out.print(m + " ");
        }
    } // end method main

} // end class Main

最佳答案

您没有调用 Object.clone()。您正在调用 T[].clone(),它被覆盖以返回 T[]

JLS 10.7 Array Members :

The members of an array type are all of the following:

  • The public method clone, which overrides the method of the same name in class Object and throws no checked exceptions. The return type of the clone method of an array type T[] is T[].

关于java - Object.clone() 不应该需要显式转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10703958/

相关文章:

java - Apache Tomcat 7 显示空白页面 Mac OSX 10.8

java - 周期性写入数据时随机长IO暂停

php - 通过克隆将名称与数组一起发布

javascript - Ext JS 4 - 克隆节点并附加到 DOM 中的其他位置

java - 我们在 java 中是否有一些占位符用于字符串,因为我们在 SQL 准备语句中有(?)

java - 有没有一种方法可以使用 Java 中的 Timer 类平滑图形组件从一个点到另一个点的过渡?

java - Class.newInstance 破坏了编译时异常检查

mysql - 克隆 MySQL 行加上新的唯一 ID

c++ - 克隆一个指针 vector ,我也能以某种方式克隆一个迭代器吗?

javascript - 将元素nodechilds保存为与javascript中元素相同的类型