泛型可以在编译阶段约束操作的数据类型,并进行检查。
泛型格式: <数据类型>
泛型只能使用应用数据类型,不能使用基本数据类型,需要使用对应包装类。
eg:(int=>Integer)。
泛型可以统一数据类型,但添加到集合里面时,还是作为object处理,取出时会进行强转数据类型。
指定泛型具体数据类型后,可以传递该类类型或其子类类型。
如果没有写泛型,默认为Object
泛型使用场景:当一个类中,某个变量的数据类型不确定时,可以定义带有泛型的类。
此处的E可以理解为变量,用于记录数据的类型。
当创建该对象设定了类型时,会自动变成该类型。
泛型方法:
当方法中形参类型不确定时,可以使用类名后面定义的泛型<E>.(只有定义过的方法可以使用)
当一个类只有个别几个方法不确定类型时使用。
格式:
修饰符<类型>返回值类型 方法名(类型 变量名){}
如果添加的元素不确定个数时可以使用E...e (e相当于一个数组,可以进行遍历)
泛型接口
修饰符 interface 接口名<类型>{}
泛型接口的实现类可以给出具体的实现类型
也可以延续泛型创建对象时在确定
泛型的继承和通配符
泛型不具备继承性,但是数据具备继承性
通配符
当泛型使用E时,此时可以接收任意的数据类型,如果要限定传入的数据只能是继承关系的数据时,可以使用通配符?。
?表示也不确定类型,但是?extends E:表示可以传递E和E的所有子类类型,?super E:表示可以传递E或者E的所有父类类型。