gpt4 book ai didi

java - 为什么 Java 编译器在构造函数实例化中会丢失对泛型类型的跟踪?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:21:06 25 4
gpt4 key购买 nike

<分区>

给定一个泛型类 Test<T>和一个采用 Class 的构造函数通用参数 public Test(Class<T> clazz){}为什么编译器不能在构造函数实例化时正确推断泛型类型 new Test(String.class)

调用构造函数时new Test(String.class)编译器似乎无法推断类型 Test<String>

这是什么原因?使用静态工厂方法,编译器推断出正确的类型:

测试.java

class Test<T> {
public Test(Class<T> clazz) {}

public static <C> Test<C> create(Class<C> clazz) {
return new Test<>(clazz);
}
}
Test<Integer> y = new Test(String.class); // works fine at both compile time and runtime, runtime error occurs when calling another method that relies on the generic type parameter

//Test<Integer> x = Test.create(String.class); // does not compile

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