Collection
類是2 toArray()
方法:<T> T[] toArray(T[] a)
和Object[] toArray()
。沒有E[] toArray()
方法。爲什麼? 它與類型擦除相關,但有例如方法 - boolean add(E e)
。爲什麼可以創建參數化的add
,並且不可能創建toArray()
方法?toArray()方法Collection類中的
回答
沒有E [] toArray()方法。爲什麼?
有沒有辦法,它可以實際上創建E[]
在執行時,因爲它不知道陣列創建,由於類型擦除類型。
的add
方法真的接受任何東西,但是編譯器只檢查參數類型與E
第一兼容。執行時不需要知道什麼。同樣,對於像List.get
,編譯器插入一個撒入調用代碼:
List<String> strings = new ArrayList<>();
strings.add("hello");
String first = strings.get(0);
被編譯成相同的代碼,因爲這預泛型代碼:
List strings = new ArrayList();
strings.add("hello");
String first = (String) strings.get(0);
現在,這是在這裏很好,因爲我們知道String
類型在調用代碼中的執行時間......但在toArray()
中,創建數組的代碼需要知道類型......並且類型擦除意味着它實際上不知道該類型。傳入toArray()
的數組允許它創建一個相同類型的數組。事實上,實際類型創建的對象可以表現取決於你在通過陣列上:
import java.util.*;
public class Test {
public static void main(String[] args) {
List<Object> objects = new ArrayList<Object>();
objects.add("xyz");
Object[] array1 = objects.toArray(new String[0]);
Object[] array2 = objects.toArray(new Object[0]);
System.out.println(array1.getClass()); // class [Ljava.lang.String;
System.out.println(array2.getClass()); // class [Ljava.lang.Object;
}
}
如果我們new Integer[0]
會通過,將有編譯,但後來我們不得不當toArray
試圖將String
(唯一元素)投射到Integer
時,獲得ClassCastException
。
我正確嗎?很快:'add'方法可以通過編譯器檢查,所以可以有參數化類型。 'toArray'方法也可以由編譯器進行檢查,但它什麼也不給,因爲由於類型擦除返回的類型將始終是Object的數組?它可以創建,但它是沒用的。參數化類型在'add'方法中,因爲編譯器可以檢查參數並且它是有用的。 – Pawel
@Pawel:排序。這真的與可以檢查的內容有關,*當*時。我不*很確定我完全按照你的想法,但希望他們符合答案:) –
- 1. Java Collection :: toArray和子類
- 2. 不同方法中的ToArray()
- 3. 的Java:如何實現`toArray`爲`Collection`
- 4. PyMongo和toArray()方法
- 5. 使用.Toarray方法
- 6. 用的ArrayList的toArray()方法
- 7. 使用toArray()方法的ClassCastException
- 8. ToArray中的Linq ToArray錯誤
- 9. 的ArrayList的toArray方法類轉換異常
- 10. c# - 爲什麼我的Dictionary類看不到ToArray()方法?
- 11. Backbone Collection過濾方法
- 12. 如何模擬調用collection方法的方法,這個collection還沒有setter?
- 13. 是collection.find()。toArray()一個asyncronus方法嗎?
- 14. 方法toArray()不工作在列表
- 15. 如何防止與Linq和ToArray()方法的雙往返方法
- 16. 類必須聲明爲抽象或實現抽象方法toArray
- 17. 爲什麼Collection <E> #toArray()不返回E []?
- 18. 比較從C#中的ToArray()方法返回的字符串值。
- 19. Java方法返回類型,預定義的Collection vs Collector?
- 20. 斯卡拉:toArray方法和地圖方法
- 21. 什麼傳遞給數組實例方法toArray(T [] a)方法?
- 22. 在設置toArray()方法中需要新的String [0]
- 23. Java中的ArrayList方法toArray擁有@SuppressWarnings(「unchecked」)註釋
- 24. 爲什麼在標準集合類型中沒有方法toVector(如toList,toArray)?
- 25. LINQ到實體無法識別方法「System.String [] ToArray的[字符串]
- 26. 嘗試從backbone.js中的視圖中調用collection中的方法
- 27. LINQ到實體無法識別方法「System.String [] ToArray的[字符串]使用SqlQuery類方法
- 28. 如何在ArrayWritable中使用toArray()方法 - Hadoop
- 29. EntityCollection <T> ToArray()擴展方法在Global.asax.cs中不起作用
- 30. 使用AngularFirestore Collection orderBy with snapShotChanges方法
對反引號很滿意嗎? – csmckelvey
你能解釋一下嗎?反撥有什麼問題:p? – Pawel
沒什麼錯,我只是給你一個難過的時間:)在這麼小的空間裏看到這麼多東西真是難得。 – csmckelvey