分为泛型的上限 <? extends 类 >(只能接收该类型及其子类)和泛型的下限 <? super 类 >(只能接收该类型及其父类型);
例如,数据类型 Byte Double Float Integer Long Short 是 Number 类的子类,把类型参数限定为 Number 后只有 Number 的子类才能作为实际类型参数;
classltdArray<T extendsNumber>{int n;int index;
Object arr[];ltdArray(int n){this.n = n;
index =0;
arr =newObject[n];}publicvoidadd(T obj){
arr[index++]= obj;}publicintlength(){return index;}public T indexOf(int i){return(T) arr[i];}}publicclasstest{publicstaticvoidmain(String[] args){
ltdArray<Integer> arr =newltdArray<Integer>(2);
arr.add(1);
arr.add(2);for(int i =0; i < arr.length(); i++){
System.out.println(arr.indexOf(i));}}}
c. 可变方法参数
可以通过泛型,让方法的形参个数可变;
publicclasstest{static<T>voidprint(T t){
System.out.println("1. "+ t);}static<T>voidprint(T... ts){//形参是可变参数的泛型方法
System.out.print("2. ");for(int i =0; i < ts.length; i++)
System.out.print(ts[i]+" ");
System.out.println();}publicstaticvoidmain(String args[]){print("s");//输出1. sprint("s","s");//输出2. s sprint("My age is ",18);//输出2. My age is 18}}