java泛型學習(1)

無信不立發表於2014-07-11

java泛型(Generices Type)

   —>概念:泛型是Java SE 1.5的新特性,泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數。這種引數型別可以用在類、介面和方法的建立中,分別稱為泛型類、泛型介面、泛型方法。 Java語言引入泛型的好處是安全簡單。

 —>優點:(1)在Java SE 1.5之前,沒有泛型的情況的下,通過對型別Object的引用來實現引數的“任意化”,“任意化”帶來的缺點是要做顯式的強制型別轉換,而這種轉換是要求開發者對實際引數型別可以預知的情況下進行的。對於強制型別轉換錯誤的情況,編譯器可能不提示錯誤,在執行的時候才出現異常【ClassCastException】,這是一個安全隱患。

      (2)泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動隱式的,提高程式碼的重用率。
Map m = new HashMap();
m.put("key", "blarg");
String s = (String) m.get("key");//需要進行顯示的強制型別轉換

View Cod

 泛型字母
T  type表示型別
K V 分別代表鍵值對中的key,value
E 代表Element
?不確定型別
【泛型類】
泛型只能使用引用型別。
 1 /**
 2  * 
 3 ----->宣告類時使用泛型
 4 ----->泛型不只能使用引用型別
 5 ----->泛型宣告時不能使用在靜態屬性,靜態方法上
 6  */
 7 public class Student<T1, T2> {
 8     private T1 javase;
 9     private T2 oracle;
10     //private static T2 add;會報錯的
11     public Student() {
12         super();
13     }
14     public Student(T1 javase, T2 oracle) {
15         super();
16         this.javase = javase;
17         this.oracle = oracle;
18     }
19 
20     public T1 getJavase() {
21         return javase;
22     }
23 
24     public void setJavase(T1 javase) {
25         this.javase = javase;
26     }
27 
28     public T2 getOracle() {
29         return oracle;
30     }
31 
32     public void setOracle(T2 oracle) {
33         this.oracle = oracle;
34     }
35 
36 }

View Code

【泛型介面】

1 /**
2  *(介面中只能定義靜態全域性變數,抽象方法)
3    介面中泛型字母只能使用在方法中,不能使用在全域性常量中
4 
5  */
6 public interface Person<T,T2> {
7     public abstract void Address(T a);
8     public  abstract T2 queryAll();
9 }

View Code

【泛型方法】

 1 /**
 2      * 
 3     *格式----->修飾符 泛型字母 返回值型別 方法名(泛型字母 形參)
 4     *(只能訪問物件資訊,不能修改物件資訊)
 5     ---><T>用在返回值型別
 6     --->也可以用在形參列表上
 7      */
 8     public  <T> void queryList(T a){
 9       
10         System.out.println("Student.queryList()"+a);
11     }

View Code

 

 


相關文章