【Java】泛型

【Java】泛型


泛型

泛型的意义

没有约束的自由,称不上为自由,这也正是泛型存在的意义,他一方面限制了代码的自由,一方面又使得代码变得自由。

限制了自由

这里说的限制了自由,其实是为了避免代码出错,变得难以管理,这里举个例子:

既然我们已经有了全能的Object类,为什么还需要泛型呢?

最初没有泛型的时候,Arraylist是使用Object类来实现的,但是这样做,存在两个问题:

  1. 当获取一个值时,必须进行强制的类型转换

    1
    String name=(String) arrayList.get(0);
  2. 没错类型检查,一个Arraylist中可以添加任意对象

但是当引入了泛型之后,ArrayList变量在声明时变决定了类型,所以这样就解决了上述两个问题。

让代码变得自由

这一点体现在提高了代码的复用率,例如:

1
2
3
4
5
6
7
8
9
10
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Pair<T> {
private T first;
private T seconde;
public void test(){
Pair<String> pair = new Pair();
}
}

泛型的原理

其实泛型的底层实现,靠的是使用的时Object类,运行时类型参数会被擦掉。例如,无论你声明的的是List<String>,还是List<Integer>或者原生类List,容器实际类型都是List<Object>。 所以泛型实际上都是狼外婆,它看上去像外婆,但实际上是大灰狼。

  • 泛型实现的原理是类型的擦除,所以不能使用基本数据类型当作泛型的类型
  • 泛型实现的原理是类型的擦除,所以不能将泛型数组同时使用

Tips

  • 常用的缩写
    • E:表示元素集合
    • K和V:表示关键字类型和值类型
    • T:表示任意类型(常用)
  • 不仅仅是类上声明泛型,在方法上也可以声明泛型。
  • 泛型的类型可以进行条件限定:
  • Class类是泛型类

 
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×