background image

对于 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 得到的结果是: