43 鹹魚學Java 泛型程式設計

2021-08-20 09:17:24 字數 2214 閱讀 3285

泛型是程式語言的一種特性。允許程式設計師在強型別程式語言中編寫**時定義一些可變部分,那些部分在使用前必須作出指明。

先將之前寫過的棧轉換為泛型棧

/**

* 泛型棧

* @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 先看下面案例 不適用泛型程式設計 新增非需要型別時發現不了錯誤。使用泛型程式設計如下 如果新增的物件型別錯誤,編譯器即可發現。指定容器要持有的物件型別,用編譯器來保證...