java基础-泛型
1.为什么要学
1.直接向集合中添加数据的时候没有约束,比如说:不同类的对象可以加到一个集合中
2.之后我们使用集合中的数据时,假如说要遍历使用,就很不“便利”了,需要使用java的(object类对象)向下转型来对不同类的对象进行处理,如何数据量up,效率就下降,这不好。
2.简单使用
ArrayList <A类>表示存放到 ArrayList 集合中的元素是 A类的对象
好处:编译时检查存放到 ArrayList 集合中的元素到底是什么类型的,安全性up;由于检查了,不再需要类型的转换,效率up;
3.泛型语法
1.声明
interface 接口 <T> class 类<K,V>{}
2.实例化
举个例子:List<String> strList = new ArrayList<String>();
4.使用注意
interface 接口 <T> / class 类<E>{}中(1.)T,E只能是引用类型(2.)<>中指定类型后,具体可以传入该类型或其子类类型
复习:八种基本数据类型相应的引用类型—包装类,List list1 = new ArrayList();默认泛型是E,即Object类
5.进阶使用-自定义泛型类/接口/方法
1.自定义泛型类
class<T,R ....>{//...表示可以有多个泛型成员
String name;
R r;
T [] nub;
}
使用说明:
- class<T,R ....>后面泛型,该class就是自定义泛型类
- T, R 是泛型的标识符
- 普通成员可以使用泛型 (属性、方法) String name;
- 使用泛型的数组,不能初始化:只能 T [] nub
- 静态方法中不能使用类的泛型,因为静态是和类相关的,在类加载时,对象还没有创建。所以如果静态方法和静态属性使用了泛型,JVM 就无法完成初始化。
2.自定义泛型接口
泛型接口的类型,在继承接口或实现接口时指定,若是没有指定类型,默认为 Object。
3.自定义泛型方法
方法被调用时候,确定类型
public <T,R> void method01(T t, R r){
}
6.泛型的继承和通配符
6.1泛型不具备继承性
我的理解:泛型就是通过编译时检查存放到 ArrayList 集合中的元素到底是什么类型的来实现安全性,所以不支持你将一个子类的泛型集合赋给一个父类的泛型集合。
举个例子:比如说,java中我们可以将一个String对象赋给Object引用(父类引用指向子类对象-向上转型),但是泛型中,List<Object> objList = new ArrayList<String>();是不可以的。
6.2通配符?
1.List <?>c ,可以接受任意的泛型类型
2.List<? extend A> c, 表示 上限为A,可以接受 A 或者 A的子类
3.List<? super A> c, 表示 下限为A,可以接受 A 或者 A的父类
7.JUnit
一个Java语言的单元测试框架,测试时在方法前使用注解@Test
方便测试:不用再main方法中调用需要测试的方法了直接@Test就可以运行该方法

浙公网安备 33010602011771号