日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

015_泛型概念

發布時間:2025/4/17 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 015_泛型概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 泛型的概念

1.1. 泛型的定義: 泛型就是參數化類型。

1.2. 泛型是JDK 1.5的一項新特性, 它的本質是參數化類型(Parameterized Type)的應用, 也就是說所操作的數據類型被指定為一個參數, 在用到的時候在指定具體的類型。

2. 參數化類型

2.1. 參數可以簡單分為: 形參, 實參, 類型形參, 類型實參。

2.2. 參數, 最熟悉的就是定義方法時有形參, 然后調用此方法時傳遞實參。

2.3. 參數化類型就是將原來的具體的類型參數化, 類似于方法中的變量參數,此時類型也定義成參數形式(可以稱之為類型形參), 然后在使用/調用時傳入具體的類型(類型實參)。

2.4. 參數類型可以用在類、接口和方法的定義中,分別稱為泛型類、泛型接口和泛型方法。

3. 為什么會出現泛型

3.1. 泛型思想早在C++語言的模板(Templates)中就開始生根發芽, 在Java語言處于還沒有出現泛型的版本時, 只能通過Object是所有類型的父類和類型強制轉換兩個特點的配合來實現類型泛化。例如在哈希表的存取中, JDK 1.5之前使用HashMap的get()方法, 返回值就是一個Object對象, 由于Java語言里面所有的類型都繼承于java.lang.Object, 那Object轉型為任何對象成都是有可能的。但是也因為有無限的可能性, 就只有程序員和運行期的虛擬機才知道這個Object到底是個什么類型的對象。在編譯期間, 編譯器無法檢查這個Object的強制轉型是否成功, 如果僅僅依賴程序員去保障這項操作的正確性,許多ClassCastException的風險就會被轉嫁到程序運行期之中。

4. 真實泛型

泛型技術在C#和Java之中的使用方式看似相同,但實現上卻有著根本性的分歧,C#里面泛型無論在程序源碼中、編譯后的IL中(Intermediate Language, 中間語言, 這時候泛型是一個占位符)或是運行期的CLR中都是切實存在的, List與List就是兩個不同的類型(泛型占位符可能是不一樣的), 它們在系統運行期生成, 有自己的虛方法表和類型數據,這種實現稱為類型膨脹,基于這種方法實現的泛型被稱為真實泛型。

5. 偽泛型

5.1.?java語言中的泛型則不一樣,它只在程序源碼中存在,在編譯后的字節碼文件中,就已經被替換為原來的原始類型(Raw Type,也稱為裸類型)了, 并且在相應的地方插入了強制轉型代碼,因此對于運行期的java語言來說,ArrayList與ArrayList就是同一個類型(運行時已經是原始類型, 所以是同一類型)。所以說泛型技術實際上是java語言的一顆語法糖,java語言中的泛型實現方法稱為類型擦除,基于這種方法實現的泛型被稱為偽泛型。

5.2.?泛型確實是在編譯階段起作用,在生成的class文件中就沒有了泛型信息,但是運行時是怎么找到原本的類型信息的呢? 其實還是強制類型轉換,編譯器將之前用到從泛型對象的地方自動添加了強制類型轉換。

6. Java泛型的作用

6.1. 減少運行時期的類型轉換異常, 增加編譯的時候對類型的檢查, 具有更好的安全性和易讀性。

6.2. 泛型程序設計(Generic Programming)意味著編寫的代碼可以被很多不同類型的對象所重用。

總結

以上是生活随笔為你收集整理的015_泛型概念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。