gpt4 book ai didi

Java泛型返回对象而不是列表

转载 作者:行者123 更新时间:2023-12-01 23:25:37 25 4
gpt4 key购买 nike

出于纯粹的好奇心,有:

List bigList = new ArrayList();

为什么这段代码可以编译:

List<List> partitions = Lists.partition(bigList , 10);
for (List partition : partitions) {}

这并不:

for (List partition : Lists.partition(bigList , 10)) {}

分区方法签名:

<T> List<List<T>> partition(List<T> list, int size)

最佳答案

List<List> partitions = Lists.partition(bigList , 10);

Lists.partition(bigList , 10)

这两行代码将在运行时执行完全相同的操作。区别在于编译时前者将被强制解释为 List<List> (带有编译器警告,因为这是一个潜在危险的事情)而后者被假定为原始 List .

当迭代 List<List> 时,元素将被假定为 List 。但对于原始类型,元素将被假定为 Object 。因此,这会破坏:

for (List partition : Lists.partition(bigList , 10)) {}

...因为您正在尝试分配 ObjectList变量。

我还想重申我在评论中提到的内容:不要使用原始类型,除非您有非常充分的理由这样做,并且完全了解这样做的风险和后果。由于 Java 的类型删除,使用原始类型将使您失去列表包含其声称包含的内容的所有保证,如果遇到错误的类型,可能会导致整个程序崩溃。

关于Java泛型返回对象而不是列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20043043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com