泛型
泛型的意义
没有约束的自由,称不上为自由,这也正是泛型存在的意义,他一方面限制了代码的自由,一方面又使得代码变得自由。
限制了自由
这里说的限制了自由,其实是为了避免代码出错,变得难以管理,这里举个例子:
既然我们已经有了全能的Object类,为什么还需要泛型呢?
最初没有泛型的时候,Arraylist是使用Object类来实现的,但是这样做,存在两个问题:
当获取一个值时,必须进行强制的类型转换
1
String name=(String) arrayList.get(0);
没错类型检查,一个Arraylist中可以添加任意对象
但是当引入了泛型之后,ArrayList变量在声明时变决定了类型,所以这样就解决了上述两个问题。
让代码变得自由
这一点体现在提高了代码的复用率,例如:
1 | @Data |
泛型的原理
其实泛型的底层实现,靠的是使用的时Object类,运行时类型参数会被擦掉。例如,无论你声明的的是List<String>
,还是List<Integer>
或者原生类List
,容器实际类型都是List<Object>
。 所以泛型实际上都是狼外婆,它看上去像外婆,但实际上是大灰狼。
- 泛型实现的原理是类型的擦除,所以不能使用基本数据类型当作泛型的类型
- 泛型实现的原理是类型的擦除,所以不能将泛型和数组同时使用
Tips
- 常用的缩写
- E:表示元素集合
- K和V:表示关键字类型和值类型
- T:表示任意类型(常用)
- 不仅仅是类上声明泛型,在方法上也可以声明泛型。
- 泛型的类型可以进行条件限定:
- Class类是泛型类