gpt4 book ai didi

java - 为什么不能创建类型参数的实例?

转载 作者:搜寻专家 更新时间:2023-11-01 01:20:09 25 4
gpt4 key购买 nike

在 Java 中,创建 type 参数的实例是非法的,因此下面的代码将不起作用:

class Gen<T> {
T ob;
Gen() {
ob = new T(); // Illegal!!!
}
}

这背后的原因是:

T does not exist at runtime, then how would the compiler know what type of object to create.

但我不明白的是,使用 erasure 下面的代码将转换为:

class Gen {
Object ob;
Gen() {
ob = new Object(); // Perfectly Fine!!!
}
}

因为:

When your Java code is compiled, all generic type information is removed (erased). This means replacing type parameters with their bound type, which is Object if no explicit bound is specified.

那么为什么实例化一个type参数是非法的呢?

最佳答案

很简单:因为T可以是任何东西。

假设您有一个 Gen<Integer> .惊喜:Integer 没有有一个默认的构造函数。那你打算怎么做new Integer()那么呢?

编译器无法知道对于以T 形式出现的事物是否有默认构造函数。 .

java.lang.Object显然有这样一个构造函数。

关于java - 为什么不能创建类型参数的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52178664/

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