泛型

使用泛型的好处:

泛型的用法是在容器后面添加<Type>,<Type>可以是类,抽象类,接口

表示这种容器,只能存放这种类型(包括子类对象)

Number的子类:int, float, double

可以设计一个支持泛型的栈MyStack,设计这个类的时候,在类的声明上,加上一个<T>,表示该类支持泛型。

T是typede缩写,也可以使用任何其他的合法的变量,比如A,B,X都可以,但是一般约定成俗使用T,代表类型

ArrayList  heroList<?extends Hero>表示这是一个Hero泛型或者其子类泛型

从heroList取出的对象,一定可以转型成Hero的,但是不能往里面放东西

ArrayList heroList<? super Hero> = new ArrayList<Object>()表示这是一个Hero泛型或者其父类泛型

可以往里面插入Hero以及Hero的子类,但是不能从里面取数据出来(可能转换类型失败)。

特例:ArrayList<?> generalList = apHeroList;

像这种形式只能用 Object o = generalList.get(0);取出来,因为?代表任意泛型

总结:

只取出,不插入,?extends Hero

只插入,不取出,?super Hero

如果希望,又能插入,又能取出,就不要使用通配符

父类类型与子类类型不能相互转化,因为你不知道父类类型指向的是什么确切的类型

原文地址:https://www.cnblogs.com/zxj-262410/p/8490308.html