【Java基础】 Java通配符和泛型

目录

泛型

什么是泛型

泛型的作用

泛型的使用方式

泛型擦除机制

为什么要进行泛型擦除,既然要擦除,为什么要使用泛型

桥方法

泛型有什么限制

通配符

什么是通配符

list和list的区别

上边界通配符,下边界通配符


详细原文输入密码 · 语雀

泛型

什么是泛型

泛型是JDK5引入的新特性

泛型的作用

泛型可以增强代码的可读性和稳定性

ArrayList list = new ArrayList<>();

例如这个就是用指定只能传入Student数据类型

泛型的使用方式

  1. 泛型类
public class A{}
  1. 泛型接口
public interface A{}
  1. 泛型方法
public static  void A(E[] array){}

泛型擦除机制

在Java编译期间,所有的泛型信息都会被擦除。

也就是说,编译器会将T类型全部都变成Object。这是为了减少虚拟机的开销

为什么要进行泛型擦除,既然要擦除,为什么要使用泛型

  • 因为泛型可以在编译期间进行类型检测
  • object类型需要强制转换,可能会导致一些错误
  • 泛型可以使用自限定类型,如T extends Compaarable

桥方法

在继承泛型时,保持多态(自动生成,不是手写生成的)

泛型有什么限制

  • 只能声明不能实例化T
  • 不能用static修饰泛型变量
  • 不能用Instance of和getClass()进行类型判断
  • 不能实例化泛型数组
  • 不能用基本类型来当泛型参数,只能用对应的引用类(因为基本数据类型不是Object的子类)

通配符

什么是通配符

可以允许参数类型的变化,用来解决泛型无法协变的问题

list和list的区别

  • list list表示具有某种类型的List但不知道是哪一种,我们添加元素进去的时候会报错
  • List list 表示list是持有元素类型是Object,可以添加任何类型对象

上边界通配符,下边界通配符

上边界通配符 extends 传入的类型实参必须是指定类型的子类型

下边界通配符super 传入的类型必须是指定类型的父类型

你可能感兴趣的:(java,开发语言)