泛型的作用是什麼,java中泛型是什麼意思,作用是什麼?

2021-03-03 20:30:14 字數 4973 閱讀 5686

1樓:刌牂箞

它有什麼優勢?它對效能有影響嗎?它在執行時的行為是什麼?.

*** bcl中有哪些泛型型別?舉例說明平時程式設計中您定義的泛型型別。 泛型的作用在於「演算法的重用」。

(這點其實很好理解,原來的arraylist只能接受object,現在通過list可以接受任何型別,也就是說arraylist的方法都被各個型別重用了。但是dot ***的泛型有個比較制肘地方,就是你很難對數值型別(值型別)進行演算法抽象,因為這牽涉到運算子過載的問題,同時dot ***的泛型的型別引數也不能約束成一個基元值型別(如int、double、float) 。) 它有什麼優勢?

第一:源**保護。(如果你知道c++模板對泛型的實現機制,就會知道c++在編譯的時候根據對泛型的呼叫,自動「內聯」了一個實現,這樣泛型的內容就暴露了,爾dot***的實現方式就不同了,泛型類和方法會被編譯成il,在執行的時候由jit負責將il變化為指定型別引數的本地**,從而保護了源**) 第二:

型別安全。(這點是最顯而易見的,拋棄了使用arraylist時各種醜陋的強制型別轉換) 第三:更清晰地**。

因為沒有了強制型別轉換,所以**自然顯得更清晰,但是使用泛型時候帶來的<>有時候確實也會讓人搞糊塗,幸好泛型方法可以用型別推斷或者using語句來進一步簡化寫法。 第四:更好的效能,因為值型別可以避免裝箱和拆箱所帶來的損耗(垃圾**的次數也會減少)。

(這點正是泛型神奇的地方,開發歷史上抽象能力的上升往往意味著效能的下降,但是泛型卻不是!泛型抽象了演算法,但是c++和dot***對泛型的實現能夠讓效能無損,並且更快。java的擦除法泛型就沒有這種效能上的好處。

) 它對效能有影響嗎? 對效能有積極的影響,因為值型別可以避免裝箱和拆箱所帶來的負面影響,避免了垃圾**,使得效能顯著提高。但是對引用型別這種影響就不明顯了。

但是需要注意的是首次為一個特定資料型別呼叫方法時,clr都會為這個方法生成本地**。這會增大應用程式的工作集大小,從而影響效能。 它在執行時的行為是什麼?

使用泛型型別引數的一個方法在進行jit編譯時,clr獲取il,用指定的型別實參進行替換,然後建立本地**。需要特別注意的是引用型別是共享**的,而對值型別就會為每一種生成獨立的一份型別**。但是需要指出的是引用型別的這種**共享並不會造成封閉型別只執行一次建構函式(就算是靜態建構函式也是這樣的)。

.*** bcl中有哪些泛型型別? list、dictionary、queue、stack、sortedlist和sorteddictionary、linkedlist等等。

舉例說明平時程式設計中您定義的泛型型別。泛型的出現會替換原來一部分使用多型的地方從而提高效能和帶來更好的編譯時檢查,這樣就不需要在子類和超類(介面)間頻繁轉換了。

java中泛型是什麼意思,作用是什麼?

2樓:匿名使用者

syteigyo是一個類的名稱。

syteigyolist是隻包括syteigyo類型別的例項類物件的列表。

泛型這個東西,說白了就是型參,也就是說型別本身可以作為引數來對類的型別做輔助說明。

3樓:匿名使用者

syteigyo<>裡表示具體的型別 syteigyolist 是一個例項

list syteigyolist 或 syteigyo syteigyolist 這樣寫能看的懂了吧

以前1.5之氣沒有泛型 要實現上述只能list syteigyolist 然後 (syteigyo )syteigyolist 強制轉換型別,這樣既麻煩,而且在實際使用過程中還可能因為型別不匹配導致拋異常。有泛型後上述的list裡實際包的就是syteigyo 的例項,而不是object,不用怕以後轉型別拋異常了

4樓:匿名使用者

java 泛型是java se 1.5的新特性,泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數。這種引數型別可以用在類、介面和方法的建立中,分別稱為泛型類、泛型介面、泛型方法。

泛型(generic type 或者 generics)是對 java 語言的型別系統的一種擴充套件,以支援建立可以按型別進行引數化的類。可以把型別引數看作是使用引數化型別時指定的型別的一個佔位符,就像方法的形式引數是執行時傳遞的值的佔位符一樣。

可以在集合框架(collection framework)中看到泛型的動機。例如,map 類允許您向一個 map 新增任意類的物件,即使最常見的情況是在給定對映(map)中儲存某個特定型別(比如 string)的物件。

因為 map.get() 被定義為返回 object,所以一般必須將 map.get() 的結果強制型別轉換為期望的型別,如下面的**所示:

map m = new hashmap();

m.put("key", "blarg");

string s = (string) m.get("key");

要讓程式通過編譯,必須將 get() 的結果強制型別轉換為 string,並且希望結果真的是一個 string。但是有可能某人已經在該對映中儲存了不是 string 的東西,這樣的話,上面的**將會丟擲 classcastexception。

理想情況下,您可能會得出這樣一個觀點,即 m 是一個 map,它將 string 鍵對映到 string 值。這可以讓您消除**中的強制型別轉換,同時獲得一個附加的型別檢查層,該檢查層可以防止有人將錯誤型別的鍵或值儲存在集合中。這就是泛型所做的工作。

泛型的好處

java 語言中引入泛型是一個較大的功能增強。不僅語言、型別系統和編譯器有了較大的變化,以支援泛型,而且類庫也進行了大翻修,所以許多重要的類,比如集合框架,都已經成為泛型化的了。

這帶來了很多好處:

1,型別安全。 泛型的主要目標是提高 java 程式的型別安全。通過知道使用泛型定義的變數的型別限制,編譯器可以在一個高得多的程度上驗證型別假設。

沒有泛型,這些假設就只存在於程式設計師的頭腦中(或者如果幸運的話,還存在於**註釋中)。

2,消除強制型別轉換。 泛型的一個附帶好處是,消除源**中的許多強制型別轉換。這使得**更加可讀,並且減少了出錯機會。

3,潛在的效能收益。 泛型為較大的優化帶來可能。在泛型的初始實現中,編譯器將強制型別轉換(沒有泛型的話,程式設計師會指定這些強制型別轉換)插入生成的位元組碼中。

但是更多型別資訊可用於編譯器這一事實,為未來版本的 jvm 的優化帶來可能。由於泛型的實現方式,支援泛型(幾乎)不需要 jvm 或類檔案更改。所有工作都在編譯器中完成,編譯器生成類似於沒有泛型(和強制型別轉換)時所寫的**,只是更能確保型別安全而已。

java語言引入泛型的好處是安全簡單。泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高**的重用率。

泛型在使用中還有一些規則和限制:

1、泛型的型別引數只能是類型別(包括自定義類),不能是簡單型別。

2、同一種泛型可以對應多個版本(因為引數型別是不確定的),不同版本的泛型類例項是不相容的。

3、泛型的型別引數可以有多個。

4、泛型的引數型別可以使用extends語句,例如。習慣上成為「有界型別」。

5、泛型的引數型別還可以是萬用字元型別。例如class<?> classtype = class.forname(java.lang.string);

泛 型還有介面、方法等等,內容很多,需要花費一番功夫才能理解掌握並熟練應用。在此給出我曾經瞭解泛型時候寫出的兩個例子(根據看的印象寫的),實現同樣的 功能,一個使用了泛型,一個沒有使用,通過對比,可以很快學會泛型的應用,學會這個基本上學會了泛型70%的內容。

5樓:匿名使用者

泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數;

你這裡的泛型是將list中儲存的型別 指定為 syteigyo ,這絕對是你係統中自定義的一個類,在list中使用一般是 javabean,也就是與想要獲取資料對應的實體類。 syteigyolist 則是你的定義的list的 變數名,無其它意義。

6樓:郝巨集飛

syeigyo是你的物件類,而syteigyolist 則是你申明的泛型物件名

java裡泛型有什麼作用?我怎麼覺得那個可寫可不寫

7樓:匿名使用者

舉個例子來說

你的錢包裡你規定只裝錢

那麼你去出來的想

也不想就是錢,管他是¥還是$不用轉換的-->都是錢(確定裡面是什麼)不用泛型的話 就不規定放什麼

那麼你取出來的東西就不一定是錢,這樣你就要轉換了,那要是石頭的話你要轉換成錢就錯了(不確定裡面到底是什麼)

8樓:匿名使用者

很多時候,尤其在使用物件的多型性的時候,你不知道進到你資料結構中的物件到底是什麼型別的,執行的時候就會出問題。泛型就是限定一個資料結構,或者一個方法引數只允許傳入什麼型別的物件。

比如類a,類b,類c,b和c繼承a。b中有屬性abc,c中有屬性def

定義一個沒有泛型的list,這時候你可以隨便往裡存,但從list往外取的時候(假設取出的物件叫obj),你要呼叫abc就要先轉型,這時候c的物件會異常……

沒事多看看教程,多敲敲**,基本上練著練著也就會了,有一套動力節點301集java基礎教程裡面講的很有趣也講得很細緻明瞭,建議你去看看。

9樓:匿名使用者

泛型賦予了型別引數式多型

的能力泛型的第一個好處是編譯時的嚴格型別檢查。有效的避免了執行期的classcastexception,提高了程式的安全性和健壯性。

這是集合框架最重要的特點。此外,泛型消除了絕大多數的型別轉換。如果沒有泛型,當你使用集合框架時,你不得不進行型別轉換。

另外 泛型簡化了**,應用泛型的程式提高程式的可讀性,更利於團隊的合作開發。

10樓:百度使用者

首先你要明白:

他給出的這個泛型,不是無意義的.

如果定義容器了list,如果你不定義他的泛型,那麼他可以放不同型別的東西.

比如你定義了一個list,這樣的話

他只可以存放整型的資料,一旦你想要放其他的型別的資料,他會包錯.

所以這個泛型的目的就是是定義的容器所放的內容是一個統一的型別.

java中泛型的作用,java中泛型的作用

初學java,看了thinking in java的泛型一章,java泛型我只看到一個作用 能夠進行編譯期間型別檢查。除此之外還有什麼作用呢?特別的是跟 泛型 這個詞有關係的作用?由於擦除的關係,能用java泛型寫的 直接針對object類來寫就能達到目的 只是沒了編譯期型別檢查另外某些地方要自己新...

c泛型和java泛型的區別,java泛型類和泛型方法的區別

泛型技術在c 和java之中的使用方式看似相同,但實現上卻有著根本性的分歧,c 裡面泛型無論在程式原始碼中 編譯後的il中 intermediate language,中間語言,這時候泛型是一個佔位符 或是執行期的clr中都是切實存在的,list與list就是兩個不同的型別,它們在系統執行期生成,有...

泛型和泛型集合的區別,java集合和泛型集合的區別?

其實不應該說是兩者的區別的,他們是一個包含的關係!在物件導向程式設計中有一個術語,叫泛化,而這個泛型的 正是 於這裡!所謂的泛型就是指的儲存的是其父型別,而實現使用時宣告好子型別而已。不管是在java還是c 中,所有的型別都是基於object這個基礎型別的。可以認為所有的其他型別都是object的泛...