java-摆脱List> .toArray()中的警告
作者:互联网
另一个方法是如何在没有警告问题的情况下执行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
编译器无法保护您免受此侵害,因此它迫使您确认/抑制警告.
标签:unchecked,generics,warnings,java 来源: https://codeday.me/bug/20191208/2094962.html