java泛型
一.泛型代码示意:
public interface Listextends Collection {//泛型接口定义,接口名后面跟尖括号,尖括号里面的表示类型名称,相当于变量X那种感觉;泛型类和泛型接口定义格式一样 int size(); boolean isEmpty(); boolean contains(Object o); Iterator iterator(); Object[] toArray(); T[] toArray(T[] a);//泛型方法定义,方法最前面的尖括号 里的T,表示类型,相当于变量X boolean add(E e); boolean remove(Object o); boolean containsAll(Collection<?> c);//泛型使用,?是无限定通配符 boolean addAll(Collection<? extends E> c);//泛型使用,? extends E 是限定通配符,需要是E本身或者其子类 boolean addAll(int index, Collection<? super E> c);//泛型使用,? super E 是限定通配符,需要是E本身或者其父类 boolean removeAll(Collection<?> c); boolean retainAll(Collection<?> c); void clear(); boolean equals(Object o); int hashCode(); E get(int index); E set(int index, E element); void add(int index, E element); E remove(int index); int indexOf(Object o); int lastIndexOf(Object o); ListIteratorlistIterator(); ListIterator listIterator(int index); List subList(int fromIndex, int toIndex); }
二.泛型类型擦除
下面代码执行结果是啥,为什么?
Listl1 = new ArrayList (); List l2 = new ArrayList (); System.out.println(l1.getClass()== l2.getClass());
结果:
true
原因:
1.泛型只是在编译时其作用,用于检查类型错误
2.编译完成后class文件中,已经没有泛型信息了
3.所有的泛型类型(就是那个变量x)被统一转义成Object类型了
擦除后的类型变成以下样子:
public interface List extends Collection
4.类名字ArrayList