gpt4 book ai didi

java - 为什么我们可以创建通用模板的新实例而不是 Java 中的通用类型?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:45:59 24 4
gpt4 key购买 nike

我知道这是不可能的: new T其中 T由于类型删除,是通用类型。

那么为什么可以做类似 new A<T> 的事情呢? T 在哪里是通用的?例如,为什么下面的编译?

static class A<T>{
T t;
A(T t){
this.t=t;
}
}

static class B<T>{

A<T> create(T t){
return new A<T>(t);
}
}

public static void main (String[] args) throws java.lang.Exception
{
A<Integer> a = new B<Integer>().create(3);
}

最佳答案

因为 A<Integer>在编译和运行时是定义明确的类型。

在概念的中间步骤,之后:

new B<Integer>()

您调用 .create(3)相当于调用:

static class B {
A<Integer> create(Integer t){
return new A<Integer>(t);
}
}

删除后,A<Integer>变成 A ,这是一个有效的类型。

你不能做 new T因为T不是一个定义明确的类型,它只是一个标记。如果确实需要,可以获取对应的类,实例化一个T类型的对象使用类似的东西:

public class GenericFactory {
<T> T create(Class<T> c) throws Exception {
return c.newInstance();
}
}

并像这样使用它:

new GenericFactory().create(Integer.class);

是的,那很丑。

关于java - 为什么我们可以创建通用模板的新实例而不是 Java 中的通用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24839794/

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