Python知識(shí)分享網(wǎng) - 專業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
Java泛型設(shè)計(jì)及其PECS原則解析
匿名網(wǎng)友發(fā)布于:2024-12-07 10:33:33
(侵權(quán)舉報(bào))
(假如點(diǎn)擊沒反應(yīng),多刷新兩次就OK!)

Java泛型設(shè)計(jì)及其PECS原則解析 圖1

 

 

資料內(nèi)容:

 

背景
在沒有泛型之前,必須使用Object編寫適用于多種類型的代碼,想想就令人頭疼,并且非常的不安
全。同時(shí)由于數(shù)組的存在,設(shè)計(jì)者為了讓其可以比較通用的進(jìn)行處理,也讓數(shù)組允許協(xié)變,這又為
程序添加了一些天然的不安全因素。為了解決這些情況,Java的設(shè)計(jì)者終于在Java5中引入泛型,
然而,正是因?yàn)橐敕盒偷臅r(shí)機(jī)較晚,為了兼容先前的代碼,設(shè)計(jì)者也不得不做出一些限制,來讓
使用者(也就是我們)以難受換來一些安全。
 
優(yōu)點(diǎn)
簡(jiǎn)單來說,泛型的引入有以下好處:
程序更加易讀
安全性有所保證
以ArrayList舉例,在增加泛型類之前,其通用性是用繼承來實(shí)現(xiàn)的,ArrayList類只維護(hù)一個(gè)
Object引用的數(shù)組,當(dāng)我們使用這個(gè)工具類時(shí),想要獲取指定類型的對(duì)象必須經(jīng)過強(qiáng)轉(zhuǎn):
 
1 import java.util.ArrayList;
2 import java.util.Date;
3
4 public class Main {
5 public static void main(String[] args) {
6 ArrayList list = new ArrayList();
7 //強(qiáng)制類型轉(zhuǎn)換
8 String res = (String) list.get(0);
9 //十分不安全的行為
10 list.add(new Date());
11 }
12 }

 

這種寫法在編譯類型時(shí)不會(huì)報(bào)錯(cuò),但一旦使用get獲取結(jié)果并試圖將Date轉(zhuǎn)換為其他類型時(shí),很有
可能出現(xiàn)類型轉(zhuǎn)換異常,為了解決這種情況,類型參數(shù)應(yīng)用而生。