## Java专题八:泛型
[TOC]
### 8.1.泛型的作用
- 进行编译时类型检查,可以发现部分类型错误语句
- 避免了运行时才抛出java.lang.ClassCastException异常的情况
- 使用时避免了进行类型转换(类似`(String)object`)的问题
**例1:** 在Java5以前集合中的元素类型都是Object类型的
```
List list = new ArrayList();
list.add(new Integer(0));
list.add("hello");
for(Object obj : list){
String str = (String) obj;
}
```
输出:
```
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
```
**例2:** Java5以后集合框架中的Object类型都换成了泛型
```
List<String> list = new ArrayList<>();
list.add("hello");
// list.add(new Integer(1)); // 报语法错误
for(String st : list){
System.out.println(st);
}
```
输出:
```
hello
```
### 8.2.泛型的约定
| 类型| 说明|
| ------------ | ------------ |
| E |Element|
| K | Key |
| N | Number |
| T | Type |
| V | Value |
| S,U,V etc. | 2nd, 3rd, 4th types |
### 8.3.泛型的使用
- 自定义泛型方法:
```
<T>int getData(T t){
return 0;
}
```
<自定义泛型声明>返回值类型 方法名(自定义泛型…变量名)
- 自定义泛型类:class 类名<自定义泛型声明>{}
```
class Person<T>{
int getData(T t){
return 0;
}
}
```
- 泛型上下限:<? super T><? Extends T>
- JavaCook
- Java专题零:类的继承
- Java专题一:数据类型
- Java专题二:相等与比较
- Java专题三:集合
- Java专题四:异常
- Java专题五:遍历与迭代
- Java专题六:运算符
- Java专题七:正则表达式
- Java专题八:泛型
- Java专题九:反射
- Java专题九(1):反射
- Java专题九(2):动态代理
- Java专题十:日期与时间
- Java专题十一:IO与NIO
- Java专题十一(1):IO
- Java专题十一(2):NIO
- Java专题十二:网络
- Java专题十三:并发编程
- Java专题十三(1):线程与线程池
- Java专题十三(2):线程安全与同步
- Java专题十三(3):内存模型、volatile、ThreadLocal
- Java专题十四:JDBC
- Java专题十五:日志
- Java专题十六:定时任务
- Java专题十七:JavaMail
- Java专题十八:注解
- Java专题十九:浅拷贝与深拷贝
- Java专题二十:设计模式
- Java专题二十一:序列化与反序列化
- 附加专题一:MySQL
- MySQL专题零:简介
- MySQL专题一:安装与连接
- MySQL专题二:DDL与DML语法
- MySQL专题三:工作原理
- MySQL专题四:InnoDB存储引擎
- MySQL专题五:sql优化
- MySQL专题六:数据类型
- 附加专题二:Mybatis
- Mybatis专题零:简介
- Mybatis专题一:配置文件
- Mybatis专题二:映射文件
- Mybatis专题三:动态SQL
- Mybatis专题四:源码解析
- 附加专题三:Web编程
- Web专题零:HTTP协议
- Web专题一:Servlet
- Web专题二:Cookie与Session
- 附加专题四:Redis
- Redis专题一:数据类型
- Redis专题二:事务
- Redis专题三:key的过期
- Redis专题四:消息队列
- Redis专题五:持久化