泛型的概念
泛型:即“参数化类型”。说到参数,我相信大家首先想到的是,在定义方法时的形数和在调用方法时传递的实参。那么对于参数化类型,就是将类型有与原来的具体类型参数化。和方法中的参数类似。说白了就是将类型当作参数一样传递过来。
为什么需要泛型
那么我们就要想一下,按照以前的方式不也是挺好吗,为什么我们需要使用泛型呢?
对于这个问题我们可以通过一个例子来说明:
在上面这个例子中,因为集合可以存放任意类型的对象数据,所以当我们想要获取集合中字符串的长度时,我就需要用到数据类型转换。但是,在集合中不仅仅有字符串,也存在这int类型和boolean类型,所以再运行时期,会出现类型转换异常(ClassCastException)。
为了解决类似这样的问题,所以泛型就应运而生了。
通过使用泛型,将代码中的运行时异常提前到编译时异常,代码演示:
List<String> list = new ArrayList<String>();
…
//这时候,如果往集合中存储非字符串数据,代码再编译时期就报错
泛型的使用
泛型的使用方式:泛型类,泛型方法,泛型接口
泛型类
泛型应用与类中,被称为泛型类,例如:ArrayList,Linked List
泛型类的定义格式:
public class Demo<泛型标识:可以写任意的标识号>{
private 泛型标识 var; //使用泛型定义变量
}
泛型的确定时机:泛型类中的泛型会再创建该类对象时决定泛型类型
Demo<String> demo = new Demo<String>(); //泛型是String
Demo<Integer> demo = new Dmeo<Interger>(); //泛型是Interger
泛型方法
泛型方法:是指带有泛型声明的方法。
泛型方法的定义格式:
public class Demo{
public <泛型标识> void info(泛型标识 var){}
}
泛型的确定时机:在调用方法的时候,会根据你所传递的参数类型,确定泛型的类型
Demo demo = new Dmeo();
demo.info(“togogo”); //这时候泛型是String类型
demo.info(true); //泛型是boolean类型
泛型接口
泛型接口:带有泛型的接口称为泛型接口。
泛型接口的声明格式和泛型类类似
public interface Demo<泛型标识>{}
泛型接口中的泛型决定方式有两种:
第一种:在实现接口的时候决定泛型
public class Test implement Demo<String>{}
第二种:是在创建实现类的时候决定泛型
public class Test<泛型标识> implement Demo<泛型标识>{}
Test<String> test = new Test<String>();
这就是泛型的几种常用方式。