我们如何看待编译器为Java中的类型擦除生成的字节码

Sat*_*wik 5 java type-erasure

可能重复:
如何查看Java的字节码?

我想知道在类型擦除之后是否可以在类文件中看到java编译器完成的代码更改.

我尝试过javap,但它使用参数化类型重建原始源文件.

教程(http://docs.oracle.com/javase/tutorial/java/generics/genTypes.html)讨论了在类型擦除后用有界类型或对象替换参数化类型.我想看看编译器做了哪些更改,这些更改在javap或任何反编译器中都不可见.

问候,sathwik

Pet*_*rey 1

类型擦除字面意思是从生成的字节代码中删除泛型类型。值得注意的是它的缺席。因此,您可以看到它不存在于字节码中。

当您使用 时javap,您将看到一些通用类型信息可用于类、方法和字段签名。包含它是为了让编译器可以使用这些类来编译代码。尽管它们可以通过反射获得,但它们在运行时不执行任何操作,因此您可以编写使用此信息的库。