泛型,泛型类,泛型方法
泛型--泛型的出现就是为了统一集合中的数据类型
泛型是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查
在jdk5之前,没有泛型的时候,集合里可以存任意类型的数据,但是都会视为object类型,取出的时候都会变成object(原理是:通过多态的方式取出)
这样的缺点是:无法使用该类的特有功能(多态的弊端:无法使用子类的特有功能)
如:存入的时候是字符串,取出的时候是object类型,无法使用字符串中的获取字符串长度的方法
强转的时候很麻烦,容易出现类型转换异常
java中的泛型是伪泛型
执行步骤:
1.在存储的时候查看是不是指定类型的数据
2.在存储的过程中还是按照object类型来存储
3.在取出的时候强转为指定类型
泛型的细节
1.泛型不能使用基本数据类型
因为泛型在存储的时候还是要转成object类型来存储的,如果是基本数据类型就没办法转成object类了
2.指定泛型的具体类型之后,传递数据时,可以传入该类类型或者其子类类型
但是一般很少这样写
3.如果不写泛型,类型默认为object
泛型类
泛型:在某个变量的数据类型不确定的时候,就可以定义带有泛型的类
import java.util.Arrays; public class MyArrayList<R> { /** * 手搓一个集合源码 */ //集合在存储的时候都是存储为Object Object[] objects; int index = 0; //集合在取出的时候才会强转为泛型指定的类型 public R get(int index){ return (R)objects[index]; } public R add(R value){ objects[index] = value; index++; return value; } // 无参构造:初始化数组 public MyArrayList() { objects = new Object[10]; // 关键:给数组分配内存空间 } @Override public String toString() { return "MyArrayList{" + "objects=" + Arrays.toString(objects) + ", index=" + index + '}'; } }package ArrayList; public class TestList { public static void main(String[] args) { MyArrayList<String> myArrayList = new MyArrayList<>(); myArrayList.add("aaa"); System.out.println(myArrayList); } }泛型方法
泛型定义
泛型定义的两种方法:
1.写在类名后面
2.写在方法上的标识符后面
这样就定义好了泛型