泛型:定义函数的时候不指定参数的类型,将类型作为变量参数(参数化的类型),在使用或调用的时候传入具体类型(类型实参)
泛型的使用:
泛型类
泛型接口
泛型方法
private static <T> T 方法名(T a, T b) {}
例:
public static <A> void print(A a){ // <A> 泛型
System.out.ptintln(a)
}
调用这个方法:
print("ABC");
泛型限制类型:定义泛型的时候,限制泛型的类型
<T extends
类或接口
1 &
接口
2>
例:
interface Fruit { }
class Apple implements Fruit { }
class Plate <T extends Fruit > { } // 这里是 extends
//使用的时候通过通配符 ?
Plate<? extends Fruit > P =new Plate<Appale>(); //指定上限,必须是XXX的子类
Plate<? super Appale > P =new Plate<Fruit>(); //指定下限,必须是XXX的父类
Plate<? > P =new Plate<Fruit>(); //没有限制
<A,B,C,D>多个泛型逗号隔开
记录今天的一个案例:
然后。。。。试了好多种写法,变成这样:
传进去的list是泛型,传出来的list也必须是泛型,就没办法new 一个list 接收LinkedHashSet的值,然后我就把list清空了,把LinkedHashSet的值重新装进去,这样不用管list是啥类型了
这样就可以了。
主要2点:
1、L是泛型,已经包含类型参数了,不用再带<T>
2、 泛型不能new,就算new成子类的实例,也传不出来,因为要传一个泛型出来