1樓:育知同創教育
泛型技術在c#和java之中的使用方式看似相同,但實現上卻有著根本性的分歧,c#裡面泛型無論在程式原始碼中、編譯後的il中(intermediate language,中間語言,這時候泛型是一個佔位符)或是執行期的clr中都是切實存在的,list與list就是兩個不同的型別,它們在系統執行期生成,有自己的虛方法表和型別資料,這種實現稱為型別膨脹,基於這種方法實現的泛型被稱為真實泛型。
java語言中的泛型則不一樣,它只在程式原始碼中存在,在編譯後的位元組碼檔案中,就已經被替換為原來的原始型別(raw type,也稱為裸型別)了,並且在相應的地方插入了強制轉型**,因此對於執行期的java語言來說,arraylist與arraylist就是同一個類。所以說泛型技術實際上是java語言的一顆語法糖,java語言中的泛型實現方法稱為型別擦除,基於這種方法實現的泛型被稱為偽泛型。
java 泛型類和泛型方法的區別
2樓:好程式設計師
在java中
泛型類:是在例項化類的時候指明泛型的具體型別。
泛型方法:是在呼叫方法的時候指明泛型的具體型別。
定義泛型方法時:必須在返回值前邊加一個,來宣告這是一個泛型方法,持有一個泛型t,然後才可以用泛型t作為方法的返回值,泛型方法不是僅僅可以有一個引數class,可以根據需要新增其他引數。
定義泛型類時:class的作用就是指明泛型的具體型別,而class型別的變數c,可以用來建立泛型類的物件
java泛型出錯的具體區別 20
3樓:安徽新華電腦專修學院
集合的泛型 你就當 這個泛型 代表 這個列表每行元素的內容。
假如是泛型放的是object,object是所有類的父類,所以可以放入所有型別的物件。
如果是integer 那麼只能放入integer物件或者integer的子類物件
如果是string 同理。
4樓:fly事在人為
泛型內的型別不同導致的
泛型和陣列以及java是如何實現泛型的
5樓:安徽新華電腦
要區分陣列和泛型容器的功能,這裡先要理解三個概念:協變性(covariance)、逆變性(contravariance)和無關性(invariant)。
若類a是類b的子類,則記作a ≦ b。設有變換f(),若:
當a ≦ b時,有f(a)≦ f(b),則稱變換f()具有協變性;
當a ≦ b時,有f(b)≦ f(a),則稱變換f()具有逆變性;
如果以上兩者皆不成立,則稱變換f()具有無關性。
在java中,陣列具有協變性,而泛型具有無關性,示例**如下:
object array = new string[10];
//編譯錯誤
arraylistlist=new arraylist();
這兩句**,陣列正常編譯通過,而泛型丟擲了編譯期錯誤,應用之前提出的概念對**進行分析,可知:
1、string ≦ object
2、陣列的變換可以表達為f(a)=a,通過之前的示例,可以得出下推論:
f(string) = string 以及 f(object) = object;
4、通過**驗證,string ≦ object 是成立的,由此可見,陣列具有協變性。
泛型和泛型集合的區別,java集合和泛型集合的區別?
其實不應該說是兩者的區別的,他們是一個包含的關係!在物件導向程式設計中有一個術語,叫泛化,而這個泛型的 正是 於這裡!所謂的泛型就是指的儲存的是其父型別,而實現使用時宣告好子型別而已。不管是在java還是c 中,所有的型別都是基於object這個基礎型別的。可以認為所有的其他型別都是object的泛...
java中泛型的作用,java中泛型的作用
初學java,看了thinking in java的泛型一章,java泛型我只看到一個作用 能夠進行編譯期間型別檢查。除此之外還有什麼作用呢?特別的是跟 泛型 這個詞有關係的作用?由於擦除的關係,能用java泛型寫的 直接針對object類來寫就能達到目的 只是沒了編譯期型別檢查另外某些地方要自己新...
泛型的作用是什麼,java中泛型是什麼意思,作用是什麼?
它有什麼優勢?它對效能有影響嗎?它在執行時的行為是什麼?bcl中有哪些泛型型別?舉例說明平時程式設計中您定義的泛型型別。泛型的作用在於 演算法的重用 這點其實很好理解,原來的arraylist只能接受object,現在通過list可以接受任何型別,也就是說arraylist的方法都被各個型別重用了。...