泛型类在java中用到的场景很多,在此对它做一个总结,如果后期还有更多的体会和总结我都会更改这篇文章,大家一起讨论。
1. 普通类继承泛型类:
(1)泛型类不指明类型,默认泛型类型为Object。
(2)泛型类指明类型。
(3)子类的通配符必须包含泛型类的通配符。
2. 类实现泛型接口:同上。
例如 class ChildGeneric extends Generic默认类型为Object。
class ChildGeneric extends Generic<String>父类必须指明具体泛型类型。
class ChildGeneric<T> extends Generic<T>子类的泛型通配符要包含父类的。
3. 泛型通配符:T,E,K,V。一般K,V会一起使用。只有包装类型(Integer,String)才能给通配符
赋值,比如int就不行。
4. 类型通配符: ? ,一般用在给某个方法传参数,而参数是泛型类,此时泛型类可以是指明具体类型的,如果希望啥类型都行, 那么就用?。在声明一个泛型类的时候,可不用?
例如:public static void main(String[] args){
Box<Integer> box=new Box<>();
test(box);
Box<Number> box2=new Box<>();
test(box2);
}
public static void test(Box<?> box){ }
5. 类型通配符上限,类型通配符下限:上限指的是<? extends Number>,表示传入的泛型类的类型只能是Number类及其子类;下限指的是<? super Number>,表示传入的泛型类的类型只能是Number类及其父类。应用场景同样是泛型类作为方法的形参。泛型通配符也有上限和下限,比如用在声明一个泛型类的时候,<T extends Number>。