关于泛型的正式Java教程解释了类型擦除以及为什么将其添加到编译器:
当实例化泛型类型时,编译器将这些类型转换为一种称为类型擦除的技术--编译器在这个过程中删除类或方法中与类型参数和类型参数相关的所有信息。类型擦除允许使用泛型的Java应用程序维护与Java库和在泛型之前创建的应用程序的二进制兼容性。
这很可能是一种务实的方法,或者说是最不痛苦的方法。然而,既然泛型在整个行业得到了广泛的支持,那么为了使我们不需要类型擦除,还能做些什么呢?它是可行的,而不需要打破向后兼容性,或者如果它是可行的,它是否实用?
以上引文中的最后一句是否成为自我参照?也就是说:“类型擦除使使用泛型的Java应用程序能够与Java库和使用执行类型擦除的Java版本创建的应用程序保持二进制兼容性。”
发布于 2012-06-05 12:48:57
寿命的终结适用于Java开发工具包和Java运行时环境.只有Oracle (Sun)版本。但它不适用于第三方编写的申请。这样做的目的是永远不要中断在JVM上运行的代码,因此Java不可能停止执行类型擦除。
当然,C#也以向后兼容的方式引入了泛型,而不执行类型擦除,但它基本上意味着复制所有集合类。我想这就是Java设计人员不想做的事情,也就是为什么他们首先选择类型擦除。如果没有值类型,非类型擦除泛型的优势就没有那么大了。
https://softwareengineering.stackexchange.com/questions/151605
复制相似问题