编程语言
首页 > 编程语言> > java-摆脱List> .toArray()中的警告

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