簡體   English   中英

為什么克隆數組沒有類型轉換?

[英]Why can clone array without type cast?

發現我可以做以下事情:

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));
        }

    }

為什么? 什么時候介紹?

JLS的第10.7節開始,數組成員

數組類型的成員是以下所有成員:

...

  • 公共方法clone ,它覆蓋Object類中的同名方法,並且不會拋出任何已檢查的異常。 數組類型T []的克隆方法的返回類型是T []。

第三版中相同部分具有相同的內容。

第二版說數組類型覆蓋clone() ,但是那時沒有返回類型協方差,所以他們不能這樣做返回T[]

所以基本上它是在1.5中引入的。

類型為T[]的數組的方法clone的返回類型是T[] 由於Object.clone()返回Object因此這種定義需要在Java 5中引入的協變返回類型。

以前clone被定義為返回Object 對於協變返回類型有利的問題尤其如此,

Java 5引入了協變返回類型 ,允許任何代碼(包括您自己的代碼)利用它們。 一般功能允許重寫方法聲明返回類型,該返回類型是原始返回類型的子類型。 請注意,聲明的變量類型必須正確才能生效。 例如,以下內容無法編譯:

Object vals1 = {1.2, 2.3, 3.4, 4.5};
double[] vals2;
vals2 = vals1.clone();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM