泛型
- 没有泛型时,集合也可以添加元素,但是多态的弊端是不能访问子类的特有功能(需强转,但是强转可以出错)
- 泛型的好处是统一了数据类型,把运行时的问题提前到了编译期间,避免强制类型转换出现的异常
- 泛型扩展:Java中的泛型是伪泛型,java文件编译成为字节码文件时class时,又擦除了泛型
- 泛型不能写基本数据类型
1. 泛型可以在很多地方定义
- 泛型类:当一个类中,某个变量的数据类型不确定时,可以用泛型类比如public class ArrayList<E>
public class MyArrayList<E>{
Object[]obj = new Object[10];
int size = 10;
public boolean add(E e){
obj[size] = e;
size++;
}
}
- 泛型方法:直接定义在方法上的泛型,比如public <E> static void addall(ArrayList<E>list,E...e)
- 泛型接口:实现类延续泛型,创建实现类对象时再确定类型
2. 泛型的继承和通配符
- 泛型不具备继承性,但是数据具备继承性;泛型里面写的是什么数据类型,那么只能传递什么数据类型
- 利用泛型方法的弊端:可以接受任意数据类型的数据;有时需要限制传递的类型,就可以使用泛型通配符
public static void method(ArrayList<?extends E>list){} //extend表示可以传递E或者E的所有子类类型 //super表示可以传递E或者E的所有父类类型 //应用场景:类型不确定,只能传递某个继承体系中的