1、泛型的类型参数声明格式如下,用于限定泛型的特性。其中,[ ]表示可选项,多个父类以&分割
类型变量 [extends 父类型列表] //其中父类型列表中可以有多个
2、虽然Object是String的父类,但是SeqList<Object>却不是SeqList<String>的父类,那么SeqList<String>的父类是谁呢?
Java约定泛型的类型参数用“?”通配符表示匹配类型,代表能够匹配任何类型,但是有两种限定通配符语法如下:
? extends T //?表示T及其任意一种子类型,T称为?的上界
? extends //?表示T及其任意一种子类型,T称为?的下界
SeqList<? extends Object>简写成SeqList<?>,因此,SeqList<?>是所有SeqList<T>的父类,例如,SeqList<T>类声明的以下方法,参数list的元素类型是T或其任一子类:
public SeqList(SeqList <? extends T> list) //深拷贝,list的元素类型是T或其任一子类
public SeqList(SeqList <? extends T> list) //集合并,list的元素类型是T或其任一子类
调用语句如下:
Object[] objs = {"A","B",10,new Integer(20)};
SeqList<Object> listobj1 = new SeqList<Object>(objs);
String str[] = {"C", "D","E"};
SeqList<String> lists = new SeqList<String>(str);
SeqList<Object> listobj2 = new SeqList<String>(lists);
listobj1.addAll(lists);
结果运行:
listobj1 = (A,B,10,20,C,D,E), listobj2=(C,D,E), lists = (C,D,E)