[英]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));
}
}
為什么? 什么時候介紹?
數組類型的成員是以下所有成員:
...
- 公共方法
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.