gpt4 book ai didi

Java 泛型类型绑定(bind)。为什么这不编译?

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:18 24 4
gpt4 key购买 nike

给定这个通用函数:

<T> List<T> function() { return null; }

为什么会这样编译

List<String> l = function();

虽然这不是

List<String> l = (List<String>) function();

最佳答案

因为当你像这样进行转换时:

(List<String>) function()

编译器无法为 function() 调用推断类型参数,并回退到将 T 绑定(bind)到 Object

虽然在

List<String> l = function();

可以T 推断出正确的类型。

请注意,如果您通过显式提供类型来规避类型推断的工作,您可以强制转换:

import java.util.List;

class Test {
public static <T> List<T> function() { return null; }

public static void main(String[] args) {
List<String> l = (List<String>) Test.<String>function();
// ^^^^^^^^^^^^^
}
}

我不知道泛型参数的确切类型推断规则。然而,它们在 JLS Section 15.12.2.7 中指定。 .

关于Java 泛型类型绑定(bind)。为什么这不编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6535749/

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