learn_java_day02:泛型简介
1.泛型
1.1泛型的介绍
简单说:泛型是一种类型参数,专门用来保存类型用的。
eg:最早接触泛型是在ArrayList
1.2使用泛型的好处
不用泛型带来的问题:集合若不指定泛型,默认就是Object,存储的元素类型自动提升为Object,获取元素时得到的都是Object,若要调用特有方法需要转型,给我们编程带来麻烦。
使用泛型带来的好处:可以在编译时就对类型做判断,避免不必要的类型转换操作,可以精简代码,也避免了因为类型转换导致的代码异常
1.3泛型的注意事项
泛型在代码运行时,泛型会被擦除,后面学习反射的时候,可以实现在代码运行的,过程中添加其他类型的数据到集合。
注:泛型只在编译时期限定数据的类型,在运行时期会被擦除
1.4自定义泛型类
当一个类定义其属性的时候,不确定具体是什么类型时,就可以使用泛型表示该属性的类型
定义格式:在类型名后面加上一对尖括号,里面定义泛型.一般使用一个英文大写字母表示,如果有多个泛型使用逗号分隔。public class 类名<泛型名>{……}
eg:public class notecode.notecode.Student<X,Y>{
X xObj;
}
泛型的确定:当创建此泛型类时,确定泛型类中泛型的具体数据类型
1.5自定义泛型接口
当定义接口时,内部方法中其参数类型,返回值类型不确定时,就可以使用泛型替代了。
定义泛型接口语法:在接口后面加上一对尖括号,尖括号中定义泛型,一般使用大写字母表示,多个泛型用逗号分隔。
语法格式:public interface<泛型名>{……}
eg:public interface Collection
public boolean add(E e);
}
泛型的确定:实现类去指定泛型接口的泛型,实现类不去指定泛型接口的泛型,则实现类进行延续泛型,回到泛型类的使用。
1.6自定义泛型方法
当定义方法时,方法中参数类型,返回值类型不确定时,就可以使用泛型替代了
泛型方法的定义:可以在方法的返回值类型前定义泛型,语法格式:public <泛型名> 返回值类型 方法名(参数列表){……}
eg:public
泛型的确定:当调用一个泛型方法,传入的参数是什么类型,那么泛型就会被确定
1.7通配符
当我们对泛型的类型确定不了,而是表达的可以是任意类型,可以使用泛型通配符给定,符号就是一个问号:?表示任意类型,用来给泛型指定的一种通配值。
eg:public static void shuffle(List<?> list){
//……
}
1.8受限泛型
受限泛型是指,在使用通配符的过程中,对泛型做了约束,给泛型指定类型时,只能是某个类型父类型或者子类型
分类:
泛型的下限:<?super 类型> //只能是某一类型,及其父类型,其他类型不支持
泛型的上限:<?extends 类型> //只能是某一个类型,及其子类型,其他类型不支持
浙公网安备 33010602011771号