【发布时间】:2016-06-02 20:50:47
【问题描述】:
你能帮我理解这里的通用概念吗?
// Can't create an instance of T.
class Gen<T> {
T ob;
Gen() {
ob = new T(); // Illegal!!!
}
public static void main() {
Gen<Integer> genobj = new Gen<Integer>(); //Error
}
}
当你的 Java 代码被编译时,所有的泛型类型 信息被删除(删除)。这意味着用它们的边界替换类型参数 类型,如果未指定显式边界,则为 Object,然后应用适当的 强制转换(由类型参数确定)以保持与类型的类型兼容性 由类型参数指定。编译器还强制执行这种类型的兼容性。
我的问题:-为什么 java 编译器在这里抛出错误? complitiion 后 Bevause 。
谢谢
【问题讨论】:
-
编译后,类型
T被删除,所以程序不会知道你要实例化的类型。 -
如果我错了请纠正我。'T' 替换为 Java.lang.Object
-
Gen
genobj=new Gen () 编译后它将是 Gen genobj=new Gen () -
T 不替换为 Object 类型。 T 被您编程接受的任何内容替换,方法是在您将其称为 Gen
gen = new Gen(); 时提供一个类型。如果你想创建一个新的“T”类型,那么你必须使用 T.newInstances(); Instantiating generics type in java你想做什么,你的代码没有意义。
标签: java