泛型
概述
1.泛型可以理解为在类上面贴了一个标签,作用是编译器通过标签确定类型。
2.所谓泛型:就是允许在定义类、接口时指定类型形参,这个类型形参将在声明变量、创建对象时确定(即传入实际的类型参数,也可称为类型实参)。 从而把原来程序运行时可能发生问题,转变为编译时的问题。
特点
▲在底层运行时会先执行一个“擦除”的动作。
▲泛型不支持继承。
▲泛型中声明的类型支持通配符。
类型通配符使用场景
List
假设现在需要定义一个方法,该方法里有一个集合形参,但是集合形参的元素是不确定的,那我们应该怎样定义?
为了解决类型被限制死了不能动态根据实例来确定的缺点,引入了类型通配符(?)。为了表示各种泛型List的父类,我们需要使用类型通配符,类型通配符是一个问号(?),将一个问号作为类型实参传给List集合,写做List<?>(意思是未知类型元素的List),它的元素类型可以匹配任何类型。
通配符上限 List<? extends Number> 类型必须继承Number
通配符下限 List<? super Integer> 类型必须是Integer或者Integer的父类
泛型入门及泛型的“擦除”机制
1 | package com.zx.泛型; |
泛型不支持继承
1 | package com.zx.泛型; |
泛型通配符讲解
1 | package com.zx.泛型; |
自定义泛型类
1 | package com.zx.泛型.自定义泛型类; |
1 | package com.zx.泛型.自定义泛型类; |