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

时间:2012-05-22 14:19:24

标签: java clone

为什么 Object.clone()调用需要显式转换?这不是“垂头丧气总是需要和明确的演员”规则的例外吗?我使用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

1 个答案:

答案 0 :(得分:5)

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

JLS 10.7 Array Members

  

数组类型的成员是以下所有成员:

     
      
  • 公共方法clone,它会覆盖同名方法   在类Object中并且不抛出任何已检查的异常。 返回类型   数组类型clone的{​​{1}}方法为T[]
  •