泛型
概念:在定义类时不指定类中信息的具体数据类型,用一个标识来代替,在外部实例化对象时才指定。
泛型的应用
除了实例化集合指定泛型,自定义类也可以用泛型:
访问权限修饰符 class 类名<泛型一,泛型二…>
访问权限修饰符 泛型标识 属性名;
访问权限修饰符 泛型标识 方法名(泛型标识 参数…){};
泛型通配符
如果我们在定义一个参数为ArrayList类型的方法时,希望该方法即可以接收String类型的参数,也可以接收Integer类型的参数,应该如何处理?可以使用多态的思想来定义该方法。
通配符:“?”
import java.util.ArrayList;
public class Test6 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
ArrayList list2 = new ArrayList();
test(list1);
test(list2);
}
public static void test(ArrayList<?> list) {
}
泛型上限和下限
在使用泛型时,会有局限性,我们可以通过泛型的上限和下限将数据类型扩展。
上限是指实例化具体数据类型,可以是上限的子类和其本身,用extends表示。
下限是指实例化具体数据类型,可以是下限的父类和其本身,用super表示。
上限:类名<泛型标识 extends 上限类名>
下限:类名<泛型标识 super 下限类名>
泛型接口
在定义接口时也可以使用泛型,与声明泛型类很相似
接口添加
实现泛型接口有两种方式,一种是实现类在定义时继续使用泛型标识,另一种是实现类在定义时直接给出具体的数据类型。
两种不同实现类的实例化方式也是不同的,第一种(实现类在定义时继续使用泛型)需要在实例化时指定具体的数据类型。
第二种(实现类在定义时指定具体的数据类型)在实例化时不需要指定具体的数据类型。