目录
前言
当我们在进行封装时,如果遇到一些不确定的类型,在之前我们会使用object,但是这样当我们取数据时需要手动进行下转型,而当我们使用了泛型后,就可以在创建对象时或者使用方法时确定类型
什么时候使用泛型
当我们遇到一些类型不确定,但是当我创建对象时或者使用方法时就能确定的类型时,就可以定义泛型,这种情况多出现在封装中
例如在之前我们封装的box容器,我们在封装时是以程序员2的身份设计容器,所以我们不知道使用这个容器的用户会往容器中存放什么类型的数据,这个时候这个容器里存放的数据类型是无法确定的
但是当我们以程序员1的身份使用容器时,我们是可以确定这个容器要存储什么类型的数据的,这种情况我们就可以使用泛型,让用户在创建对象时确定类型
如何定义泛型
public class A {
? a;
? b:
public ? c(? i){
}
}
在代码中我们有两个属性和方法的返回值以及方法参数的类型不确定,如果你能确定这些类型是相等的就可以只定义一个泛型
public class A <T>{
T a;
T b:
public T c(T i){
}
}
我们使用一对尖括号来定义泛型,尖括号中间的字母可以是任意的名字,但是一般我们用大写的单个字母表示
当用户创建了A类的对象时可以传递一个数据类型,这个传入的数据类型对应着这个字母T,这样当传入泛型后,我们可以看作A类中所有T的地方全是你传入的泛型的数据类型
如果属性a,b和方法中的泛型类型不一样,我们可以定义多个泛型,让用户传入多个数据类型
public class A <T,E>{
T a;
T b:
public E c(E i){
}
}
多个泛型中间用逗号隔开
确定泛型
public class A <T>{
main(){
A<String,User> a = new A<>();
}
}
在确定泛型时也是使用尖括号来确定泛型,这里我传了两个泛型,如果类中只有一个泛型就只需要穿一个泛型,多个泛型中间也用逗号隔开
如果我们没有传入泛型类中的泛型默认使用object类型
方法泛型
除了类泛型,还有一种方法泛型
public static <T> T t1(T a){}
我们也可以在方法的返回值类型前面定义一个泛型,这个泛型可以定义返回值类型和参数类型
那么这个方法泛型我们如何确定呢?
t1("zs") ;
我们只需要调用方法即可,传递的参数是什么类型泛型就是什么类型