泛型是程式語言的一種特性。允許程式設計師在強型別程式語言中編寫**時定義一些可變部分,那些部分在使用前必須作出指明。
先將之前寫過的棧轉換為泛型棧
/**
* 泛型棧
* @author 14831
* * @param
*/public class
tstack
/**
* 有參建構函式
* @param i 棧的長度
*/public tstack(int i)
/*** 入棧
* @param val
*/public void push(t val)
this.data[top++] = val;
}/**
* 出棧
* @return 資料
*/public t pop()
return
this.data[--top];
}/**
* 獲得棧頂元素
* @return 資料
*/public t gettop()
return
this.data[top-1];
}public static void main(string args)
for (int i = 0; i < a.length; i++)
}}
執行結果9 8 7 6 5 4 3 2 1 0
此泛型棧可以根據型別存放不同的物件。
t是乙個型別佔位符,它所佔的位置就是當你確定這個泛型的型別之後,系統進行自動型別檢查和自動型別轉換所確定的型別
a.會對型別進行自動檢查
b.會進行自動型別轉換
1.不能new泛型型別的陣列
正確的方式是這種
data = (t) new object[length];
2.不能new泛型的物件
因為t
只是在編譯的時候進行型別的檢查
3.不能得到泛型型別的物件陣列
tstack a = new tstack[10]; ×
錯誤
因為泛型本質是向上擦除成object,所以其陣列相當於object陣列,而且其沒有泛型的約束,所以會產生矛盾。
如tstack a = new tstack[10];
===object a = new object[10];
然後就可以給a賦任何值,所以其泛型也就沒有了意義,此點和泛型的作用(編譯型別檢查)相矛盾
4.簡單型別不能作為泛型的引數
如int,double,float等
5.在static方法中,不能用泛型型別的引數
public
static t gett()
錯誤,其正確方式為
public
static
t gett()
只有在static後面加上
編譯器才能通過
泛型的實質是型別擦除,擦除的最終目標是object,當我們給泛型設定上界以後,泛型就會被擦除成你所指定的上界。其宣告方式為
extends
superclass>
這樣就有了無限可能。
我們可以寫乙個findmax函式,可以查詢所有實現comparable
介面的類的最大值.
/**
* 尋找最大值
* @author 焦焱
* * @param
comparable擦除到comparable*/
class
mymath
extends
comparable
>
}return maxval;
}}
測試
integer a = ;
mymath a1 = new mymath();
system.out.println(a1.finmaxval(a));
integer內部已經實現了comparable介面。
結果64000
Java泛型程式設計
泛型程式設計的意義 編寫的 可以被很多不同型別的物件所重用。好處 出現編譯錯誤比類在執行時出現類的強制型別轉換異常要好得多。程式設計師的任務 出所用類的未來可能有的所有用途。1 定義簡單泛型類 public class paircatch throwable t block.throwas t ps...
Java之泛型程式設計
1.概念 泛型就是引數化型別。泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高 的重用率。2.案例 1 先看下面案例 不適用泛型程式設計 list li new arraylist 使用泛型程式設計如下 使用泛型的優點 大型應用時能顯著降低程式的複雜度 泛型為較大的優化...
Java之泛型程式設計
1.概念 泛型就是引數化型別。泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高 的重用率。2.案例 1 先看下面案例 不適用泛型程式設計 新增非需要型別時發現不了錯誤。使用泛型程式設計如下 如果新增的物件型別錯誤,編譯器即可發現。指定容器要持有的物件型別,用編譯器來保證...