为什么需要泛型?
古代类型安全
- StringList
- StringObjectMcp
- StringStringListObjectMcp
泛型由来
- 从此,我们就可以用省力的方法编写类型安全的代码
- List
- MapvString,Object>
- MapvString, ListvObject>>
存在的问题
- 向后兼容性
- https://www.zhihu.com/question/28665443
- 你只有两条路:
- 擦除-> Java的选择
- 搞一套全新的API -> C#的选择
擦除带来的问题
- Java的泛型是假泛型,是编译期的泛型
- 泛型信息在运行期完全不保留
- 编译器的警告
- 使用限定符List<?>
- 可以通过利用泛型擦除来绕过编译器检查
- List
并不是List
泛型的限定符
? extends
? super
Collections.sort
泛型的绑定
-
? extends要求泛型是某种类型及其子类型
-
? super要求泛型是某种类型及其父类型
-
Collections.sort
-
泛型方法是如何工作的
-
泛型方法的绑定
-
按照参数绑定
-
按照返回值自动绑定
-
最难的绑定:
-
Collector s的一系列泛型化方法
编写泛型代码
- 不要一上来就写泛型方法,而是慢慢重构
- 编写泛型方法
- 编写泛型的类