gpt4 book ai didi

java - Java 中的数组、列表和泛型

转载 作者:行者123 更新时间:2023-11-30 03:22:42 25 4
gpt4 key购买 nike

试图完全理解 Java 中的泛型,我遇到了一个无法真正解决的问题,也无法在网络上找到具体的解决方案。我有这个方法:

public <T extends City> void someMethod(List<T[]> objectsList) {
List<City[]> myList = (List<City[]>) objectsList;
}

只需将其写入编译器即可提供一个我可以忽略的错误 - 但是在编译过程中编译器失败说

Error:(97, 46) error: incompatible types: List<T[]> cannot be converted to List<City[]> where T is a type-variable: T extends City declared in method <T>someMethod(List<T[]>)

一个简单的解决方案是简单地运行接收到的“objectsList”中的整个列表和数组,并一次对它们进行类型转换,这会起作用(我尝试过),但是我不太确定这是正确的方法做吧...

最佳答案

这不是您经常想要做的事情(因为泛型和数组不能很好地混合),但有一些重要的事情需要注意:

  • T保存方法的类型信息。您可能没有传递 City在任何时候,如果您不这样做,Java 也无法帮助您。
  • 由于泛型是不变的,因此强制转换并不安全;你不能说List<City[]>相当于 List<T[]> ,即使T extends City .

有了这个,您可以做的就是在泛型类型上使用通配符来解决这个问题。在您接受该方法的内容和要存储的内容的声明中使用它们。然后,您可以避免强制转换,一切都是类型安全的。

public <T extends City> void someMethod(List<? extends T[]> objectsList) {
List<? extends T[]> myList = objectsList;
}

关于java - Java 中的数组、列表和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30967126/

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