如何将通用列表转换为数组?

时间:2014-08-21 18:38:13

标签: java arrays list generics

我开始发现Java泛型的奇迹......

显然,您无法创建通用数组:

Stuff<Thing>[] array = new Stuff<Thing>[5]; // doesn't compile

很明显,你也不能这样做(当没有涉及泛型时,这种方法很有效):

// thingsList is an ArrayList<Stuff<Thing>>
Stuff<Thing>[] array = thingsList.toArray(new Stuff<Thing>[0]);

所以我的问题是,我该如何解决这个问题呢?如何轻松地将通用列表转换为数组?

2 个答案:

答案 0 :(得分:3)

ArrayList<Stuff<Thing>> thingsList = new ArrayList<Stuff<Thing>>();
Stuff<Thing>[] array = (Stuff<Thing>[] )thingsList.toArray(new Stuff[0]);

答案 1 :(得分:2)

将是以下内容:

Stuff<Thing>[] array = thingsList.toArray(new Stuff<Thing>[thingsList.size()]);

但是,无法制作参数化数组是对泛型的限制,请参阅http://docs.oracle.com/javase/tutorial/java/generics/restrictions.html#createArrays

所以只有以下方法才有效:

Stuff[] array = thingsList.toArray(new Stuff[thingsList.size()]);

但这是一种原始类型。

因此,建议只使用List<Stuff<Thing>>而不是数组。