从上一篇泛型(一)之为何引入泛型
可以知道了没有泛型的世界是多么的悲催,引入泛型带来的便利,下面就详细正式的介绍一下泛型
一 什么是泛型
Java泛型(generics)是JDK5中引入的一种参数化类型特性
二 为什么使用泛型,使用泛型的好处
- 代码更健壮(只要编译期没有警告,那么运行期就不会出现ClassCastException)
- 代码更简洁(不用强转)
- 代码更灵活,复用性更强
举个栗子 List 中的sort
default void sort(Comparator<? super E> var1) {
Object[] var2 = this.toArray();
Arrays.sort(var2, var1);//只要实现了Comparator这个接口 都可以使用这个 sort方法
ListIterator var3 = this.listIterator();
Object[] var4 = var2;
int var5 = var2.length;
for(int var6 = 0; var6 < var5; ++var6) {
Object var7 = var4[var6];
var3.next();
var3.set(var7);
}
}
三 泛型的分类
- 泛型接口
public interface Plate<T> {
public void set(T t);
public T get();
}
- 泛型类
public class AIPlate<T> implements Plate<T> {
List<T> items = new ArrayList<T>();
public AIPlate() {
}
public AIPlate(T t) {
items.add(t);
}
@Override
public void set(T t) {
items.add(t);
}
@Override
public T get() {
int index = items.size() -1;
if(index>= 0){
return items.get(index);
}else{
return null;
}
}
@Override
public String toString() {
return "AIPlate{" +
"items=" + items +
'}';
}
}
- 泛型方法
public <T> AIPlate<T> getAIPlate(){
return new AIPlate<T>();
}
四 参数化类型
就是将类型当参数一样传递
参数类型只是引用类型(泛型副作用)
例如:
Plate<T>中的”T”称为类型参数
Plate<Banana>中的”Banana”称为实际类型参数
“Plate<T>” 整个成为泛型类型
“Plate<Banana>”整个称为参数化的类型
网友评论