在理解什么是泛型之前,我想大家先分析以下代码。思考该代码是否会报错,报什么错。
- import java.util.ArrayList;
-
- public class ListTest{
- public static void main(String[] args) {
- //数组队列保存数据
- ArrayList arrayList=new ArrayList ();
- //name
- arrayList.add("张三");
- //age
- arrayList.add ( 18 );
- //sex
- arrayList.add ("男");
- String msg;
- for (int i = 0; i < arrayList.size (); i++) {
- msg=(String)arrayList.get ( i );
- System.out.println (msg);
- }
- }
- }
- 复制代码
答案似乎很显然,在我们打印的时候,他会出现以下错误信息:

在上面的编码和报错中我们能发现以下两个问题:
msg=(String)arrayList.get ( i );只是简单的将所有数据强制转换,所有才会报错。java语言提出的泛型就是用来避免上面的这类错误的。泛型意思就是参数化类型,而参数化类型,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式,然后再调用时传入具体的参数类型。
在java语言中,泛型定义如下:
- public class 泛型类类名<T>{
- //....
- }
- 复制代码
声明泛型变量并赋值的方法:
- 泛型类类名<具体类名> 变量名 = new 泛型类类名<>(参数列表);
- 复制代码
注:< T >声明是泛型的标记,T可以是成员属性的类型、其内部方法的返回类型方法参数的类型。泛型类的构造方法的参数列表中,一定包含数据类型是其他类名的常量或变量
泛型的接口定义
- public interface 接口名<T>{
- public void 方法1(参数列表);
- public T 方法2(参数列表);
- //......
- }
- - 泛型方法定义
- ```java
- public <T> void 方法名(参数列表){
- //。。。。
- }
- 复制代码
- 方法名(实参参数列表);
- 复制代码