我开始发现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]);
所以我的问题是,我该如何解决这个问题呢?如何轻松地将通用列表转换为数组?
答案 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>>
而不是数组。