1:泛型简介
1.1泛型基本概念:
泛型的本质就是“数据类型的参数化”,处理的数据类型是不固定的,而是可以作为参数传入。我们可以把“泛型”理解为数据类型的一个占位符(类似:形式参数),即告诉编译器,在调用泛型时必须传入实际类型。这种参数类型可以用在类、接口和方法中,分别被称为泛型类,泛型接口,泛型方法。
参数化类型:
1:把类型当作是参数一样传递
2:<数据类型>只能是引用类型
1.2泛型的好处
1;代码可读性更好【不用强制转换】
2:程序更加安全【只要编译时期没有警告,运行时期就不会出现ClassCastException异常】
1.3类型擦除
编码时采用泛型写的类型参数,编译器会在编译时去掉,称为类型擦除
2:泛型的使用
2.1定义泛型
泛型字符可以是让任何标识符,一般采用几个标记E、T、K、V、N、?.
| 泛型标记 | 对应单词 | ||
|---|---|---|---|
| E | Element | 在容器中使用,表示容器中的元素 | |
| T | Type | 表示普通的Java类 | |
| K | Key | 表示键;例如:Map中的Key | |
| V | Value | 表示值 | |
| N | Number | 表示数值类型 | |
| ? | Element | 表示不确定的Java类型 |
2.2泛型类
就是把泛型定义在类上,用户使用该类的时候,才把类型明确下来。泛型类的具体使用方法是在类的名称后添加一个或多个类型参数声明,如:,<T,K,V>
2.2.1语法结构
public class 类名<泛型标识符号>{
}
package com.bjsxt;
public class Generic<T> {//成员变量和方法参数
private T flag;
public void setFlag(T flag){// 创建set方法
this. flag = flag;
}
public T getFlag(){//get方法
return this.flag;//无返回值,return返回
}
}
package com.bjsxt;
public class Test {
public static void main(String[] args) {
Generic<String> generic = new Generic<>();//创建generic对象,泛型创建时,需要明确类型例如String类型
generic.setFlag("admin");
String flag = generic.getFlag();//调用get方法
System.out.println(flag);
Generic<Integer>generic1 = new Generic<>();
generic1.setFlag(100);
Integer flag1 = generic1.getFlag();
System.out.println(flag1);
}
}