从jdk1.5开始,java允许定义泛型类,泛型借口,的泛型方法。
ArrayList<String> str = new ArrayList<>();
ArrayList<Integer> integer = new ArrayList<>();
这里就用的了泛型类 ArrayList定义在java.util.ArrayList<E>
这里的<E> <T> 表示泛型参数,随后可以用具体的类型来替换,替代泛型称为泛型实例化。
使用泛型的好处:可以在编译时检查出错误。
例如:
a. Compara c = new Date();
System.out.println(c.compareTo("red"));
这样在编译时检查不出错误,只有在运行时才能检查出错误。
b. Comparable <Date> c = new Comparable();
System.out.println(c.compareTo("red"));
这样在编译时就可以检查出错误
定义泛型借口和泛型类
例如:下面我们定义一个泛型栈
import java.util.ArrayList; /***************************************** GenericStack() 创造一个空栈 getSize() int 返回栈中元素的个数 peek() T 返回栈顶元素 pop() T 返回并移除栈顶元素 push(T) void 添加元素 isEmpty() boolean 判断栈是否为空 ****************************************/ public class GenericStack <T>{ public static void main(){ } private ArrayList<T> list = new ArrayList<>(); public int size(){ return list.size(); } public T peek(){ return list.get(list.size()-1); } public T pop(){ T a = list.get(list.size()-1); list.remove(list.get(list.size()-1)); return a; } public boolean isEmpty(){ return list.isEmpty(); } }
泛型方法:
import java.util.ArrayList; public class GenericMethonDemo <E>{ public static void main(String [] args){ ArrayList<Integer> test = new ArrayList<>(); test.add(5); test.add(4); test.add(3); test.add(2); test.add(1); test.add(1); test.add(2); test = removeDuplicates(test); for(int i=0;i<test.size();i++){ System.out.println(test.get(i)); } } public static <E> ArrayList<E> removeDuplicates(ArrayList<E> list){ ArrayList<E> x = new ArrayList<>(); for(int i=0;i<list.size();i++){ if(list.subList(i+1,list.size()).contains(list.get(i))==false) x.add(list.get(i)); } return x; } }
关于泛型还有通配泛型
例如<? extends T> <?> <? super T>
今天先写到这里吧,记单词去了。。。