2 回答

TA貢獻1830條經驗 獲得超3個贊
(Collection<T extends E> c)
, T 和 ? 可以相同,尤其是如果?是這樣使用的(Collection <? extends E) c)
。此處違反了通配符(Collection<? Extends E>)
的使用,因為現在這是針對特定對象層次結構而不是針對所有對象類型
通配符不應僅限于特定的對象類型。
但是你需要指定T的類型,基本上T必須是某個對象層次結構的一個實例。
通配符可以是任何類型。
public default <T> T[] toArray(T[] array)
這是哪里用的?與 T 相同,因為沒有定義 T 的類型,因為在命名或指定類型時不能使用任何特殊字符,所以可以用 T 代替?。這是一個接口方法,有人必須實現具有此方法的接口并提供 T,并且 T 可以是 aLinkedList
或 any Object
。

TA貢獻1789條經驗 獲得超10個贊
public default boolean addAll(Collection<? extends E> c)
假設你有class A和class B extends A。然后List<A>.addAll會做類似的事情:
void addAll(Set<B> bs) {
for (A a : bs) {
add(a);
}
}
public default <T> T[] toArray(T[] array)
當然default允許有一個在接口中實現的方法。
要將 a 轉換List<T>為數組T[]存在一個問題:在運行時 java 的類型擦除意味著只有一個對象列表。為了接收數組元素的正確類,設計從
List<C>
C[] toArray() // NOT possible,
<T> T[] toArray(T[] sample)
如果參數(sample此處)具有正確的大小,則采用該數組,否則創建一個新數組。
List<String> list = ... // At runtime simply a List of Object.
String[] array = list.toArray(new String[list.size()]); // Created array taken.
String[] array = list.toArray(new String[0]); // New array created.
現在人們可能會認為第一個版本更優化,最好。事實上,人們經常提到使用更間接的形式。
然而,它向我展示了第二個版本更快。它使用其他字節碼數組構造。
添加回答
舉報