对于 Java 语言的 Type Erasure 的特性分析
每次提到语言的时候我总是忍不住骂 Java
——
是一门生产力低下,固步自封的语言
这估
计要一直等到 Java 语言被 JVM
上的其他语言取代之后吧。JVM 上目前已经有许多语言了:
JRuby,Jython;还有一些特定于 JVM 平台的语言,如 Scala 和 Groovy 等等。但是,为什么
JVM
上没有 C#语言呢?按理说,这门和 Java 十分相似,却又强大许多的语言更容易被
Java 程序员接受才对。您可能会说,Sun 和微软是对头,怎么可能将 C#
移植 到 JVM 平台
上呢?嗯,有道理,但是为什么社区里也没有人这么做呢(要知道 JVM 上其他语言都是由
社区发起的)?
其实在我看来,这还是受到了技术方面的限 制。
泛型是 Java 和 C#语言的重要特性,它使得程序员可以方便地进行类型安全的编程,
而不需要像以前那样不断进行类型转换。例如,我们要在 Java 中写一个泛型字典的封装便
可以这么做:
看 上 去 和 C# 并 没 有 什 么 区 别 , 不 是 吗 ? 不 过 , 如 果 我 们 观 察 编 译 后 生 成 的
bytecode(类似于.NET 平台上
的 IL),便会发现一丝奇妙之处。使用 javap -c DictWrapper 得到的结果是: