泛型(Generic)
在编译阶段识别泛型,但是在jvm运行之前就将泛型的痕迹擦除
泛型即参数化类型,在jdk1.5的版本之后才开始的概念
参数化类型?
将一种数据类型以参数的形式传递给类,接口,方法中
好处:可以将运行期间的问题提前到编译阶段进行检查
泛型接口:
public interface List extends Collection{}
泛型类:
public class ArrayList
extends AbstractList
implements List, RandomAccess, Cloneable, Serializable
泛型方法:
static List asList(T... a)
返回有指定数组支持的固定大小的列表
泛型标记命名是可以自定义的
jdk中常见的泛型的名称有:
K(key键)
V(value值)
E(Element元素)
T(Type类型)
>通配符 任意的类型都可以 Object
public class MyClass {
//访问控制修饰符 返回值数据类型 方法名(参数列表){
// 方法体;
// }
public I add(I a,I b){
System.out.println(a);
System.out.println(b);
return null;
}
public static void main(String[] args){
//创建对象的时候指定数据类型
MyClass mc = new MyClass<>();
Integer x = mc.add(10,20);
MyClass m = new MyClass<>();
}
}
泛型上下边界的限定 extends E> super E>
extends E> 是 Upper Bound(上限)的通配符,用来限制元素的类型的上限的 比如:
List extends Fruit> fruits;
表示集合中的元素类型上限为Fruit类型,即只能是Fruit或者Fruit的子类,因此对于下面的
赋值合理的是:
fruits = new ArrayList();
fruits = new ArrayList();
如果集合中的元素类型为Fruit的父类就会出现错误,比如:
fruits = new ArrayList
public class Animal {
}
--------------------------------------------------------
public class Cat extends Animal{
}
--------------------------------------------------------
public class Dog extends Animal{
}
--------------------------------------------------------
public class Test {
public static void main(String[] args) {
//上限:
// extends 父类>
//ArrayList extends Animal> animals = new ArrayList();
ArrayList extends Animal> animals = new ArrayList();
ArrayList extends Animal> animals1 = new ArrayList();
ArrayList extends Animal> animals2 = new ArrayList();
//下限
// super 子类>
ArrayList super Dog> dogs = new ArrayList();
ArrayList super Animal> arrayList = new ArrayList();
ArrayList super Dog> dogs1 = new ArrayList();
//ArrayList super Dog> dogs2 = new ArrayList();
//赋值
ArrayList dogs2 = new ArrayList();
dogs2.add(new Dog());
dogs2.add(new Dog());
dogs2.add(new Dog());
ArrayList extends Animal> animals3 = dogs2;
System.out.println(animals3.size());
ArrayList animals4 = new ArrayList();
animals4.add(new Animal());
animals3 = animals4;
System.out.println("----" + animals3.size());
ArrayList objects = new ArrayList();
objects.add(new Object());
//ArrayList extends Animal> animals4 = objects;
ArrayList dogs3 = new ArrayList();
dogs3.add(new Dog());
ArrayList super Dog> dogss = dogs3;
dogss = objects;
dogss = animals4;
}
}