java基础--泛型

151 阅读2分钟

1 java泛型时如何工作的?什么是类型擦除

  1. 泛型是通过类型擦除来实现的,编译器在编译时擦出了所有类型的相关信息,所以在运行时不存在任何类型的相关信息。例如:List在运行时禁用一个List来表示。这样做的目的是确保能和java5之前的版本开发二进制类库兼容
  2. 类型擦除:泛型信息只存在代码编译阶段,在进入JVM前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。在泛型类被类型擦除的时候,之前泛型类中的类型参数部分如果没有指定上限,如会被转译成普通的Object类型,如果制定了上限类型如则类型参数就被替换成类型上限

2 什么是泛型中的限定通配符和非限定通配符

  1. 限定通配符对类型进行了限制。由两种限定通配符,一种是它通过确保类型必须是T的子类来设定类型的上界,另一种是它确保类型必须是T的父类来设定类型的下界。泛型类型必须用限定内的类型来进行初始化,否则会编译报错。另一方面表示非限定通配符,因为<?>可以用任意类型来替代

3 List<? extends T>和List<? super T>之间有什么区别

  1. 这两个List的声明都是限定通配符的例子,List<? extends T>可以接受任何继承自T的类型的List,而List<? super T>可以接受任何T的父类构成的List。例如List<? extends Number>可以接受List或List
  2. Array不支持泛型,要用List代替Array,因为List可以提供编译器的类型安全保证,而Array却不能