0x01.泛型的概念
泛型:可以在类或方法中预支地使用未知的类型。
说明:一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。
优点:
- 1.将运行时期的ClassCastException,转移到了编译时期变成了编译失败。
- 2.避免了类型强转的麻烦。
0x02.泛型的具体使用
使用含有泛型的类:
定义格式:
修饰符 class 类名<代表泛型的变量> { }
在创建对象的时候确定泛型
例如:
public class ATClass<AT> {
//没有AT类型,在这里代表 未知的一种数据类型 未来传递什么就是什么类型
private AT at;
public void setAT(AT at) {
this.at = at;
}
public MVP getAT() {
return at;
}
}
//具体使用:
ATClass<String> obj=new ATClass<>();
obj.setAT("这是字符串作为泛型确定型的使用")
ATClass<Integer> obj1=new ATClass<>();
obj1.setAT(1);
使用含有泛型的方法:
定义格式:
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
调用方法时,确定泛型的类型
例如:
public <BT> void show(BT bt) {
System.out.println(bt);
}
//具体使用:
ATClass<String> obj=new ATClass<>();
obj.show("泛型确定为字符串类型");
使用含有泛型的接口:
定义格式:
修饰符 interface接口名<代表泛型的变量> { }
可以定义类时确定泛型的类型
也可以始终不确定泛型的类型,直到创建对象时,确定泛型的类型
具体使用与上面一致。
0x03. 泛型通配符
说明:
- 泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。
- 一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。
- 泛型不存在继承关系
受限泛型:
JAVA的泛型中可以指定一个泛型的上限和下限。
泛型的上限:
- 格式:
类型名称 <? extends 类 > 对象名称
- 意义:
只能接收该类型及其子类
泛型的下限:
- 格式:
类型名称 <? super 类 > 对象名称
- 意义:
只能接收该类型及其父类型
例如: Number是Integer的父类。
扫描二维码关注公众号,回复:
9391607 查看本文章
// 泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
public static void pratice1(Collection<? extends Number> coll){}
// 泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
public static void practice2(Collection<? super Number> coll){}