Java 面试笔记

@bingoogolapple 2014-09-29 01:27:50发表于 bingoogolapple/bingoogolapple.github.io Java

泛型类型擦除

  • Java 的泛型是在编译器层次实现的
  • 在编译生成的字节码中不包含泛型中的类型参数,类型参数会在编译时去掉。例如:List 和 List 在编译后都变成 List
  • 由于泛型并不是从 Java 诞生就存在的一个特性,而是等到 Java SE 5 才被加入的,所以为了兼容之前并未使用泛型的类库和代码,不得不让编译器擦除掉代码中有关于泛型类型信息的部分,这样最后生成出来的代码其实是泛型无关的
  • 编译时更强大的类型检测。Java 编译器对泛型应用了强大的类型检测,如果代码违反了类型安全就会报错。修复编译时错误比修复运行时错误更加容易,因为运行时错误很难查找到
  • 类型参数只能是类,例如 List,不能是简单类型,例如 List