为什么 List.toArray() 不是通用的?为什么必须将类型作为参数提供(并且通常创建一个新的空实例)?
public Object[] toArray()
http://docs.oracle.com/javase/7/docs/api/java/util/List.html#toArray()
更新:从那以后,我了解到不允许创建通用数组,但我相信它应该是。有什么不被允许的理由吗?
Main.java:28: error: generic array creation
T[] ret = new T[size()];
更新:好的,我相信这是答案:
http://docs.oracle.com/javase/tutorial/java/generics/restrictions.html#createArrays
不是因为它直接相关,而是间接相关。new T[size()]
, whereMyList<String>
会变成本质上没有任何问题new String[size()]
,但 T 本身可以是参数化类型。因此,如果您要创建MyList<Set<Integer>>
, thenT
将等于Set<Integer>
并且编译器将尝试创建new Set<Integer>[size()]
,这可能会导致返回时链接出现问题。有人试图按照这些思路给出答案,但该答案已被删除,所以我忘记了它是谁。