java泛型的作用和實現原理
① 泛型的作用
泛型(Generic type 或者 generics)是對 java 語言的類型系統的一種擴展,以支持創建可以按類型進行參數化的類。可以把類型參數看作是使用參數化類型時指定的類型的一個佔位符,就像方法的形式參數是運行時傳遞的值的佔位符一樣。
可以在集合框架(Collection framework)中看到泛型的動機。例如,Map 類允許您向一個 Map 添加任意類的對象,即使最常見的情況是在給定映射(map)中保存某個特定類型(比如 String)的對象。
因為 Map.get() 被定義為返回 Object,所以一般必須將 Map.get() 的結果強制類型轉換為期望的類型,。
② 對java泛型的理解
泛
型(Generic type 或者 generics)是對
簡單的理解,就是對類型的參數化,比如我們定義一個類屬性或者實例屬性時,往往要指定具體的類型,如Integer、Person等等,
但是如果使用了泛型,我們把這些具體的類型參數化,用一個廣泛的可以表示所有類型的「類型」T來定義,那這個T就是泛型的表示。
可以在集合框架(Collection framework)中看到泛型的動機。例如,Map 類允許您向一個 Map 添加任意類的對象,即使最常見的情況是在給定映射(map)中保存某個特定類型(比如 String)的對象。
因為 Map.get() 被定義為返回 Object,所以一般必須將 Map.get() 的結果強制類型轉換為期望的類型,如下面的代碼所示:
[java]view plainprint?
Mapm=newHashMap();
m.put("key","value");
Strings=(String)m.get("key");
- 要讓程序通過編譯,必須將 get() 的結果強制類型轉換為 String,並且希望結果真的是一個 String。如果map中保存了的不是 String 的數據,則上面的代碼將會拋出 ClassCastException。
③ java泛型的作用,舉例說明!
簡言之,泛型是為了避免類轉換異常的發生,使程序操作更安全,舉例:
1、聲明泛型:
class Point<T>{
private T var;
public T getVar(){
return var;
}
public void setVar(T var){
this.var=var;
}
}
2、使用Point類將var的類型設置成整數
public class Test{
public static void maint(String[] args){
Point<Integer> p=new Point<Integer>();//var類型為Integer
p.setVar(30);//設置數字,自動裝箱
System.out.println(p.getVar() * 2);
}
}
3、運行:60
分析:使用泛型強制類型為某類型,比如上面為Integer,在使用setVar()方法時如果參數不是Integer(如String),程序就會報錯,提示輸入非法。當然你認為也可以不用泛型,比如將Point定義如下:
class Point1{
private Object var;
public Object getVar(){
return var;
}
public void setVar(Object var){
this.var=var;
}
}
此時,Test程序依然可以運行,但是如果將Test改動如下:
public class Test{
public static void maint(String[] args){
Point1 p=new Point1();
p.setVar(「江山美人");
System.out.println(p.getVar() * 2);
}
}
程序編寫正常,不會報錯,但到了運行才提示異常。而如果上面是應用泛型,在寫下System.out.println(p.getVar() * 2);直接就會在寫程序時提示錯誤!
這樣就達到了使用泛型的目的——避免類轉換異常的發生,使程序操作更安全。
希望能幫到你!
④ 什麼叫泛型有什麼作用
泛型。即通過參數化類型來實現在同一份代碼上操作多種數據類型。泛型類和泛型方法同時具備可重用性、類型安全和效率,這是非泛型類和非泛型方法無法具備的。泛型通常用與集合以及作用於集合的方法一起使用。
泛型是c#2.0的一個新增加的特性,它為使用c#語言編寫面向對象程序增加了極大的效力和靈活性。不會強行對值類型進行裝箱和拆箱,或對引用類型進行向下強制類型轉換,所以性能得到提高。
Java 的泛型
Java 泛型的參數只可以代表類,不能代表個別對象。由於Java泛型的類型參數之實際類型在編譯時會被消除,所以無法在運行時得知其類型參數的類型,而且無法直接使用基本值類型作為泛型類型參數。Java編譯程序在編譯泛型時會自動加入類型轉換的編碼,故運行速度不會因為使用泛型而加快。
由於運行時會消除泛型的對象實例類型信息等缺陷經常被人詬病,Java及JVM的開發方面也嘗試解決這個問題,例如Java通過在生成位元組碼時添加類型推導輔助信息,從而可以通過反射介面獲得部分泛型信息。通過改進泛型在JVM的實現,使其支持基本值類型泛型和直接獲得泛型信息等。
⑤ java中的泛型是幹嘛的,起到什麼作用什麼情況下才能用到泛型
泛型:規定了此集合中元素的類型。
例如:
ArrayList<Integer> arr = new ArrayList<Integer> ();
這樣就創建了一個包含整數的 ArrayList 對象。
如果要自己定義泛型類,就用如下形式:
class MyCollection<E> {...}
尖括弧中的類型可以有限制,例如你需要讓 MyCollection 中的類型都具有可比性,可以用如下格式:
class MyCollection<E extends Comparable> {...}
⑥ 簡述java常用3種泛型定義及其作用
泛型(Generic type 或者 generics)是對 Java 語言的類型系統的一種擴展,以支持創建可以按類型進行參數化的類。可以把類型參數看作是使用參數化類型時指定的類型的一個佔位符,就像方法的形式參數是運行時傳遞的值的佔位符一樣。
定義泛型方法語法格式如下:
定義泛型方法時,必須在返回值前邊加一個<T>,來聲明這是一個泛型方法,持有一個泛型T,然後才可以用泛型T作為方法的返回值。
Class<T>的作用就是指明泛型的具體類型,而Class<T>類型的變數c,可以用來創建泛型類的對象。
⑦ Java里泛型有什麼作用我怎麼覺得那個可寫可不寫
泛型的作用就是提高代碼的重用性,你肯定知道函數重載吧,但是重載的話還是太煩,要累贅的寫這么多的重復代碼,泛型就是就是避免強制類型轉換,減少裝箱拆箱提高性能,減少錯誤
⑧ Java中的泛型是什麼意思干什麼用的難道只是用來限制數據類型嗎
不是限制類型的
泛型的就是按同樣結構都實現了,但具體使用時的決定類型
如Vector<> 泛型,具體的向量操作如增加新元素,刪除舊元素,找元素位置的等均已實現
以後不管是整數向量,String向量還是其他定義類向量,不用修改代碼了。這也是代碼復用的體現之一。
⑨ java泛型的介紹
泛型是Java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。這種參數類型可以用在類、介面和方法的創建中,分別稱為泛型類、泛型介面、泛型方法。 Java語言引入泛型的好處是安全簡單。在Java SE 1.5之前,沒有泛型的情況的下,通過對類型Object的引用來實現參數的「任意化」,「任意化」帶來的缺點是要做顯式的強制類型轉換,而這種轉換是要求開發者對實際參數類型可以預知的情況下進行的。對於強制類型轉換錯誤的情況,編譯器可能不提示錯誤,在運行的時候才出現異常,這是一個安全隱患。泛型的好處是在編譯的時候檢查類型安全,並且所有的強制轉換都是自動和隱式的,以提高代碼的重用率。