泛型: 用来约束数据的数据类型
泛型的格式:
<数据类型>
泛型可以使用在 类,接口,方法,变量上
泛型的好处
A:提高了程序的安全性
B:将运行期遇到的问题转移到了编译期
C:省去了类型强转的麻烦
泛型类, 就是把泛型的声明 定义在类上
如何声明一个泛型类 :
格式 : public class 类名 <泛型类型> {}
什么时候将泛型的类型确定的?
创建对象的时候确定的
泛型方法: 把泛型定义声明在方法上
如何声明一个泛型方法:
格式:public <泛型类型> 返回类型 方法名(泛型类型 .)
什么时候将泛型的类型确定的?
调用方法的时候确定的
泛型接口: 把泛型定义在接口上
如何声明一个泛型接口:
格式:public interface 接口名<泛型类型1…>
什么时候将泛型的类型确定的?
创建接口子类对象的时候确定的
泛型高级(通配符):
泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
? 理解为就是 Object类型
<? extends E>
向上限定,E及其子类
? extends Animal
? 代表的就是Animal类本身或者是Animal类的子类
<? super E>
向下限定,E及其父类
? super Animal
? 代表的就是Animal类本身或者是Animal类的父类
泛型的格式:
<数据类型>
泛型可以使用在 类,接口,方法,变量上
泛型的好处
A:提高了程序的安全性
B:将运行期遇到的问题转移到了编译期
C:省去了类型强转的麻烦
泛型类, 就是把泛型的声明 定义在类上
如何声明一个泛型类 :
格式 : public class 类名 <泛型类型> {}
什么时候将泛型的类型确定的?
创建对象的时候确定的
泛型方法: 把泛型定义声明在方法上
如何声明一个泛型方法:
格式:public <泛型类型> 返回类型 方法名(泛型类型 .)
什么时候将泛型的类型确定的?
调用方法的时候确定的
泛型接口: 把泛型定义在接口上
如何声明一个泛型接口:
格式:public interface 接口名<泛型类型1…>
什么时候将泛型的类型确定的?
创建接口子类对象的时候确定的
泛型高级(通配符):
泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
? 理解为就是 Object类型
<? extends E>
向上限定,E及其子类
? extends Animal
? 代表的就是Animal类本身或者是Animal类的子类
<? super E>
向下限定,E及其父类
? super Animal
? 代表的就是Animal类本身或者是Animal类的父类