泛型机制
泛型是一种特殊的类型,它把明确类型推迟到创建对象或者调用方法时,采取明确这个类型,
泛型的格式 : <数据类型> 这里的数据类型只能是引用数据类型
泛型可以定义在类,接口,方法上
泛型的好处:
- 避免了向下转型
- 性能优化
- 类型安全
ArrayList list2 = new ArrayList();
list2.add("aaaaa");
list2.add("bbbb");
list2.add("ccc");
list2.add("ddd");
Object obj = list2.get(0);
String string= (String) obj;
int length = string.length();
ArrayList<String> list3= new ArrayList();
list3.add("aaaaa");
list3.add("bbbb");
list3.add("ccc");
list3.add("ddd");
String s = list3.get(0);
System.out.println(s);
这个例子说明使用泛型可以避免向下转型
泛型接口:
public interface MyInterface<T,U,R> { //泛型接口
public R show(T t,U u);
}
//泛型接口的实现
public class MyDemo implements MyInterface<String,Integer,Integer>{
@Override
public Integer show(String s, Integer integer) {
return null;
}
}
泛型类:
public class MyClass<T> { //泛型<T> 我把泛型加在类上
T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
泛型方法:
//将泛型加在方法上,就是泛型方法
public<T> void show(T a) {
System.out.println(a);
}
向上限定和向下限定
//? 泛型统配符
ArrayList<?> objects = new ArrayList<Dog>(); //
//向上限定<? super Cat>
//后面只能写该类的父类,或该类本身
ArrayList<? super Cat> objects2 = new ArrayList<Cat>(); //
//<? extends Animal> 向下限定,后面只能写该类的子类,或该类本身
ArrayList<? extends Animal> objects3 = new ArrayList<Cat>(); //
ArrayList<Integer> integers = new ArrayList<>();
integers.add(100);
ArrayList<Integer> integers2 = new ArrayList<>();
integers2.add(100);
integers.addAll(integers2);