Java中泛型的工作

Java中泛型的工作,java,generics,Java,Generics,我试图了解泛型的工作原理,它说类被编译成普通类,任何地方都没有提到类型,并且有一个checkcast操作符,它被传递给对象类被转换到的类型,我们从ArrayList获得该类型 String i=ArrayListObject.get(position); 但是当没有类型时,编译器怎么知道泛型ArrayList只能存储在中声明的类型呢。编译类时,此信息存储在何处。 请更新这只是事实的一半 是的,在运行时,没有使用任何类型信息;只移动“对象”。这就是所谓的类型擦除 但是:哪些字段、方法。。。我们使

我试图了解泛型的工作原理,它说类被编译成普通类,任何地方都没有提到类型,并且有一个checkcast操作符,它被传递给对象类被转换到的类型,我们从ArrayList获得该类型

String i=ArrayListObject.get(position);
但是当没有类型时,编译器怎么知道泛型ArrayList只能存储在中声明的类型呢。编译类时,此信息存储在何处。
请更新

这只是事实的一半

是的,在运行时,没有使用任何类型信息;只移动“对象”。这就是所谓的类型擦除

但是:哪些字段、方法。。。我们使用一些泛型定义的T非常好地编译到类文件中。以便编译器可以读取该类文件;并且可以理解您想要实例化一些
ArrayList

换句话说:您在这里谈论的是两件不同的事情:A)一个编译器读取类文件以便可以完成它的工作,B)一个JVM读取类文件以运行代码


因此,当您真正好奇该信息存储在哪里时,请参见

这只是事实的一半

是的,在运行时,没有使用任何类型信息;只移动“对象”。这就是所谓的类型擦除

但是:哪些字段、方法。。。我们使用一些泛型定义的T非常好地编译到类文件中。以便编译器可以读取该类文件;并且可以理解您想要实例化一些
ArrayList

换句话说:您在这里谈论的是两件不同的事情:A)一个编译器读取类文件以便可以完成它的工作,B)一个JVM读取类文件以运行代码


因此,当您真正好奇该信息存储在哪里时,请参见

这叫做类型擦除。java泛型不是C++语言泛型,它为每个类型创建了一个完全唯一的类。他问,当所有类型信息都被擦除时,编译器如何完成它的工作,这叫做类型擦除。java泛型不是C++语言泛型,它为每个类型创建了一个完全唯一的类。他问,当所有类型信息都被删除时,编译器如何完成它的工作。谢谢。这些信息确实很有用。链接有完整的细节。谢谢。这些信息确实很有用。链接有完整的细节。