认识泛型
定义类、接口、方法,同时声明了一个或多个类型变量(如:<E>),称为泛型类、泛型接口,泛型方法,它们统称为泛型。
public static void main(String[] args) {
//认识泛型。ArrayList就是一个泛型类,可以指定泛型的类型
ArrayList<String> s=new ArrayList<>();
}
作用:
泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力。这样可以避免强制类型转换,及可能出现的异常。
通配符:
?,可以在“使用泛型”的时候代表一切类型
泛型类
格式及模拟
修饰符 class 类名<类型变量,类型变量,...>{
}
//例如
//泛型类,模拟ArrayList
public class MyArrayList <E>{
public boolean add(E e){
return true;
}
public E get(int index){
return null;
}
}
//测试
public static void main(String[] args) {
MyArrayList<String> list = new MyArrayList<>();
list.add("java1");
list.add("java2");
}
泛型接口
修饰符 interface 接口名<类型变量,类型变量,...>{
}
//例如
//泛型接口
public interface MyArrayList <T>{
void add(T t);
ArrayList<T> getByName(String name);
}
//测试
public class FanXingTest implements MyArrayList<String>{
@Override
public void add(String s) {
}
@Override
public ArrayList<String> getByName(String name) {
return null;
}
}
泛型方法
修饰符 <类型变量,类型变量,..> 返回值类型 方法名(形参列表){
}
//例如
public static <T> T test(T t){}
//测试
public class FanXingTest{
public static void main(String[] args) {
String test = test("Test");
System.out.println(test);
String s = test(new String());
System.out.println(s);
}
public static <T> T test(T t){
return t;
}
}
注意事项
- 泛型是在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。
- 泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。