## 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專題五:持久化