# 第四章第三节--2 使用泛型
标签(空格分隔): 廖雪峰
---
## 泛型使用对比
1. 不使用泛型
`list`的接口变为`Object`类型.
使用`void add(Object)`
和 `Object get(int)`
编译器会发出警告.
在输出的时候无法判断`Object`具体类型.
![不是要用泛型](http://p0b921qfc.bkt.clouddn.com/18-5-18/71831382.jpg)
2. 使用泛型.
定义泛型`<String> list`的接口变为强类型`String`
`void add(String)`
`String get(int)`
输出则直接按照`String`输出.
![使用泛型](http://p0b921qfc.bkt.clouddn.com/18-5-18/96946482.jpg)
3. 自定义对象使用泛型
定义泛型`<Number> list`的接口变为强类型`Number`
`void add(Number)`
`Number get(int)`
输出则直接按照`Number`输出.
![Number作为泛型](http://p0b921qfc.bkt.clouddn.com/18-5-18/16271812.jpg)
**注意:使用泛型的时候,可以忽略编译器可以直接推断出来的类型**
```java
List<Number>list = new ArrayList<>();//后面的类型便可省略
```
在Arrays的sort方法中可以通过泛型来实现自定义数据类型的排序.
对于一般数据类型如下:
![一般数据](http://p0b921qfc.bkt.clouddn.com/18-5-18/22154364.jpg)
对于自定义数据.
![自定义数据](http://p0b921qfc.bkt.clouddn.com/18-5-18/77103093.jpg)
## 小节小结
- 使用泛型的时候,把泛型参数`<T>`替换成需要的`class`类型.
- 可以省略编译器能自动推断出来的类型`List<String>list = new ArrayList<>()`;
- 不指定泛型参数类型的时候,编译器会给出警告,且只能将<T>视为Object类型.
- 前言
- 一:Java快速入门
- 二:Java面向对象编程
- 三:Java异常处理
- 错误处理
- Java的异常
- 捕获异常
- 抛出异常
- 自定义异常
- 断言和日志
- 使用断言
- 使用JDK Logging
- 使用Commons Logging
- 使用Log4j
- 四:Java反射与泛型
- 反射
- Class类
- 访问字段
- 调用方法
- 调用构造方法
- 获取继承关系
- 注解
- 使用注解
- 定义注解
- 处理注解
- 泛型
- 什么是泛型
- 使用泛型
- 编写泛型
- 擦拭法
- extends通配符
- super通配符
- 泛型和反射
- 五:Java集合
- Java集合简介
- Java集合简介
- List
- 使用List
- 编写equals方法
- Map
- Set
- Queue
- Stack
- 最佳实践
- 六:Java IO编程
- 七:Java处理日期和时间
- 八:JUnit单元测试
- 九:Java正则表达式
- 十:Java加密与安全
- 十一:Java多线程编程
- 十二:Maven基础
- 十三:Java网络编程
- 十四:Java操作XML和JSON
- 十五:Java JDBC编程
- 十六:Java函数式编程