當您只知道集合的子類型時,有沒有辦法使用Collection::toArray(T[])
方法?Java Collection :: toArray和子類
拿這個例子:
void initList(Collection<? extends AorB> data) {
JList<? extends AorB> aorb_jlist = new JList<>();
aorb_jlist.setListData(data.toArray(new T<? extends AorB>[data.size()]));
}
abstract class AorB {}
class A extends AorB {}
class B extends AorB {}
(我只是把T
那裏說明,我知道,那就沒辦法了)
所有我知道的Collection
是它的AorB
一個子類,但它可能是。 JList
接受<? extends AorB>
作爲它的類型,但setListData
方法需要一個數組,而Collection::toArray
需要輸入。
我吠叫錯了樹toArray
?有沒有一種簡單而有效的方法將此Collection轉換爲數組而無需手動迭代呢?
編輯回答@PaulBoddington:
你不能改變<? extends AorB>
到<AorB>
因爲那麼該方法將不會收到亞型的集合:
例子:
void initList(Collection<AorB> data) {
JList<AorB> aorb_jlist = new JList<>();
aorb_jlist.setListData(data.toArray(new AorB[data.size()]));
}
abstract class AorB {}
class A extends AorB {}
class B extends AorB {}
public static void main(String[] args) {
LinkedList<A> a_list = new LinkedList<>();
initList(a_list);
}
引發錯誤:
incompatible types: LinkedList<A> cannot be converted to Collection<AorB>
你就不能使用'JList的'和一個'AorB []'? –
@PaulBoddington,無論JList是使用''還是'<?擴展AorB>',你仍然必須將'Collection'轉換爲數組。你如何轉換一個'集合<?將AorB>'擴展爲數組? –
ryvantage
'collection.toArray(new AorB [collection.size()]);' –