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就可以运行该方法

 

posted @ 2023-01-14 16:09  ZitWang  阅读(32)  评论(0)    收藏  举报