Java之泛型篇

2021-06-26 08:03:54 字數 2104 閱讀 7579

出處:

1、泛型的意義:

往小處說,是為了實現型別安全的集合

往大處說,是為了實現模版程式設計的理念

2、為什麼要出現泛型:

雖然集合具有長度可擴充、插入刪除方便等強大的特性

但是集合內部可以儲存的物件是型別不安全的

釋義:什麼是型別不安全:

因為集合內部可以裝入/取出的元素是object型別

因此任何物件都能夠往裡裝

這時若想要從集合中取得乙個string物件時

則必須要在取出後將其強制轉換成string型別

但是如果取出的物件並非string型別的物件

則強制轉換就會發生錯誤,這就是型別不安全

因此採用泛型是為了實現型別安全,同時提高程式的可讀性

3、泛型的含義:

簡單地理解,泛型的含義就是,在定義集合的時候,就指定集合內部可以裝入物件的型別。

這樣該集合內就只能裝入該種型別的物件,同時取出的物件也是該種型別的,而不再是object。

定義的格式是:

list list = new arraylist ();

這樣list.add("abc");是合法的,list.add(123);就是非法的

同時string s = list.get(0);是合法的,而不需要再次進行強制型別轉換

/*********以下內容為擴充套件知識*********/

4、不同泛型的集合不能夠相互賦值:

只有泛型相同的集合之間才能夠相互賦值

不支援泛型為子類的集合賦值給泛型為父類的集合

例如:public void print(list list)

}list list1 = new arraylist ();

list list2 = new arraylist ();

print(list1);  //非法

print(list2);  //合法

5、萬用字元"?"

以上問題的解決方法是:

public void print(list <?> list)

}list list1 = new arraylist ();

list list2 = new arraylist ();

print(list1)  //合法

print(list2)  //合法

*?是泛型的萬用字元,可以代表任意乙個泛型

*也可以限制?可以代表泛型的泛圍,語法是:

<? extends string>              //限制該泛型只能是string或string的子類

<? extends comparable>  //限制該泛型只能是comparable的實現類(注意這裡用的也是extends)

<? super number>              //限制該泛型只能是number或number的父類

6、定義泛型方法:

格式:在方法的返回值前面加上,可以使方法稱為泛型方法(模版)

作用:用於統一方法內部的引數型別,t的型別由呼叫該方法時的引數決定

例子:public class testgenerics3

}public static void main(string args)

}7、定義泛型類:

格式:在類名後面加上,可以使該類稱為泛型類

作用:用於動態決定類內部的方法引數型別和返回值型別

例子://定義乙個介面,定義介面的泛型為t

//那麼,該介面的實現類指定t的具體型別是什麼,t的型別就是什麼

inte***ce i

//指定介面i內的t為string型別

class ic1 implements i

}//指定介面i內t為collection型別

class ic2 implements i

}

Java之泛型程式設計

1.概念 泛型就是引數化型別。泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高 的重用率。2.案例 1 先看下面案例 不適用泛型程式設計 list li new arraylist 使用泛型程式設計如下 使用泛型的優點 大型應用時能顯著降低程式的複雜度 泛型為較大的優化...

java學習之泛型

泛型 jdk1.5後出現的安全機制。好處 1 將執行時期的問題classcastexception轉到了編譯時期。2 避免了強制轉換的麻煩。什麼時候使用?當操作的引用資料型別不確定的時候,就使用 將要操作的引用資料型別傳入即可。其實 就是乙個用於接收具體引用資料型別的引數範圍。在程式中,只要用到了帶...

Java回爐之泛型

定義 public class demo 使用 new demo method test 定義 public class demo 使用 new demo method test 定義 public inte ce demo指定型別實現及使用 public class demoimpl implme...