1. 泛型是什么
泛型有泛型类、泛型接口、泛型方法。
- class HashMap<K,V>
- interface Generator<T>
- <T> T method(T t)
2. 为什么我们需要泛型
不需要写 addInt(int x, int y)、addFloat(float x, float y) 这种代码,使用泛型后修改为:
<T extends Number> T add(T x, T y)
3. 虚拟机是如何实现泛型的
泛型中的 T、K、V 等都会被擦除为 Object,但编译器在编译后会加上强制类型转换,如:
使用泛型的代码:
编译器编译后的代码:
4. 注意
这种使用无法通过编译:
因为下面两个方法的参数 List<String>、List<Integer> 被泛型擦除后都会变为 List<Object>。