另一个没有警告问题的如何执行 toArray(),但它与此处发布的大多数问题不同。
如何重写方法实现(不更改方法签名)以使其在没有警告的情况下编译?
这里明显的困难是 T 的类信息在运行时不可用。但是,返回类型在运行时也是一种删除类型,因此没有理由不能这样做。那么,如果想要强制执行编译时类型安全,我该怎么做呢?
谢谢
<T> GenericClass<T>[] toGenericArray(List<GenericClass<T>> list) {
return list.toArray(new GenericClass[0]);
}
最佳答案
你不能。因为数组是协变的,所以不可能为包含参数化类型的数组提供编译时安全性。 (除非您使用合法的 < ? >。)
这永远是合法的:
GenericClass<String>[] array = new GenericClass[1];
Object[] brokenArray = array;
brokenArray[0] = new GenericClass<Integer>();
String value = array[0].getGenericValue(); //kaboom
编译器无法保护您免受这种情况的影响,因此它会强制您承认/禁止出现警告。
关于java - 摆脱 List<GenericClass<T>>.toArray() 中的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4434447/