gpt4 book ai didi

java - List 与 List 不同时的示例
转载 作者:行者123 更新时间:2023-12-01 12:02:28 24 4
gpt4 key购买 nike

它是用java制作的,泛型不会自动从Generic<A>转换而来至Generic<SupeclassOfA> .

例如,如果写一个方法

public static void printList(List<Object> list) {
for (Object elem : list)
System.out.println(elem + " ");
System.out.println();
}

它不会接受List<Integer> 。我需要重写 List<?> 的 header 尽管代码是相同的,但它将开始工作。

那么,为什么要这么做呢?

假设我重新设计Java这样List<?>始终与 List<Object> 含义相同。我会遇到什么问题?

最佳答案

假设一个方法采用 List<Object>接受了List<Integer> 。这意味着 List<Integer>List<Object> 的子类型。如果这是真的,你可以这样做:

List<Integer> intList = new ArrayList<Integer>();
List<Object> objList = (List<Object>) intList;
objList.add("foo");
int a = intList.get(0); // This would fail at runtime because intList.get(0) is a String.

如果你可以转换 List<Integer>List<Object>您将失去泛型提供的编译时类型安全性。

List<?>List<Object> 不同。 List<?>List某种未知类型的T 。自 T未知,无法向 List<?> 添加任何内容(null 除外)。这与 List<Object> 完全相反。您可以在其中添加任何内容。

一般来说,List<Object>很少是你所需要的。大多数时候你想要一个 List其中所有项目都具有相同的类型,例如 List<Integer>List<String> 。如果您正在编写类型不重要的方法,例如仅打印项目的示例,则参数应具有类型 List<?>

关于java - List<?> 与 List<Object> 不同时的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27897217/

24 4 0