java - 摆脱 List<GenericClass<T>>.toArray() 中的警告

标签 java warnings generics unchecked

另一个没有警告问题的如何执行 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/

相关文章:

java - 从服务层到前端的java消息传递有哪些选项

mysql - 警告 : mysql_pconnect(): MySQL server has gone away with using cloud database

scala - 关于 Java 和 Scala 中的泛型

swift - Property Wrapper @Lazy 变量线程安全吗?

java - 在解析上下文之外以编程方式访问 ANTLr 语法规则字符串文字

java - 这使我的程序卡住

java - 行程解压

php - 如何修复 PHP 中 date() 的警告"

iphone - 解密 UIViewController 属性警告

java - 这里泛型需要什么?