定义:在编译过程中约束操作的数据类型。(统一数据类型)
格式:<数据类型>
泛型中不能写基本数据类型。
泛型类
在一个类中,某个变量的数据类型不确定时,可以定义带有泛型的类。
泛型的底层是Object类,所以调用Object来书写方法。
package test02;import java.util.Arrays;public class MyArrayList <E>{Object[] obj=new Object[10];//编写Object类型的数组int size;//编写添加元素方法public boolean add(E e) {obj[size]=e;size++;return true;}//编写得到public E get(int index) {return (E)obj[index];}public String toString() {return Arrays.toString(obj);}
}
public class test {public static void main(String [] args) {MyArrayList<String> list=new MyArrayList<>();list.add("aaa");list.add("bbb");String str=list.get(0);System.out.println(str);System.out.println(list);}
}
泛型方法
方法中形参类型不确定时可以使用类名后面的泛型,也可以在方法申明上定义自己的泛型。
小练习:定义一个工具类:ListUtil,类中定义一个静态方法addAll,用来添加多个集合的元素。
package test02;
import java.util.ArrayList;
public class ListUtil {public static<E> void adddAll(ArrayList<E>list,E e1,E e2,E e3) {list.add(e1);list.add(e2);list.add(e3);}
}
public class test {public static void main(String [] args) {ArrayList<String> list1=new ArrayList<>();ListUtil.adddAll(list1,"aaa", "bbb", "ccc");System.out.println(list1);}
}
泛型接口
举例:public interface List<E>{
}
两种使用方式:实现类给出具体的类型;实现类延续泛型,创建实现类对象时再确定类型。
泛型的继承和通配符
泛型不具有继承性,但数据具有继承性。
泛型通配符:?
?extends E:可以传递E或E所有的子类类型。
? super E:可以传递E或E所有的父类类型。