gpt4 book ai didi

java - 编译器如何推断 Java 泛型中的类型

转载 作者:行者123 更新时间:2023-11-29 06:54:44 27 4
gpt4 key购买 nike

我有一个看起来像这样的通用方法。

public static <T> T addAndReturn(T element, Collection<T> collection){
collection.add(element);
return element;
}

当我打电话

String stringElement = "stringElement";
List<Object> objectList = new ArrayList<Object>();
Object theElement = addAndReturn(stringElement, objectList);

它将类型推断为对象。

当我打电话

Object objectElement = new Object();
List<String> stringList = new ArrayList<String>();
Object theElement = addAndReturn(objectElement, stringList);

编译器报错。

这背后的规则是什么?

最佳答案

在第一种情况下,您传递的是 List<Object>Collection<T>所以T必须是 Object类型。 String stringElementObject 的子类所以这是允许的。

在第二种情况下,您传递的是 List<String>Collection<T>所以T只能是String .作为Object objectElement不是 String不允许键入此内容。

您不能添加 ObjectList<String>这似乎是合理的。

关于java - 编译器如何推断 Java 泛型中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36777502/

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