[英]when casting is need for clone() method?
考慮下面的代碼:
ArrayList<Double> list1 = new ArrayList<>();
list1.add(1.5);
list1.add(2.5);
list1.add(3.5);
ArrayList<Double> list2 = (ArrayList<Double>)list1.clone();
Date[] list3 = {new Date(), new Date(4664316)};
Date[] list4 = list3.clone();
int[] list5 = {1, 2};
int[] list6 = list5.clone();
為什么list.clone()需要強制轉換,而list3.clone()和list5.clone()不需要強制轉換? 我知道數組和ArrayList之間的區別,但是不確定確切的原因。
請閱讀文檔 。
注意,所有數組都被認為實現了Cloneable接口,並且數組類型T []的clone方法的返回類型為T [],其中T是任何引用或原始類型。
但是在ArrayList中,將返回一個Object,因此需要強制轉換。
Clone()方法簽名返回一個對象類型。
按照慣例,此方法返回的對象應獨立於該對象(正在克隆)
因此,需要強制轉換。
數組的行為不同,並返回正確鍵入的克隆數組。 因此無需鑄造。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.