java中的泛型

2021-08-02 17:58:20 字數 1735 閱讀 5649

之前對泛型的理解一直停留在listj集合中的元素限定的那塊,後來慢慢的接觸到了介面的泛型,類以及方法的泛型。下面結合查到的資料,算是記錄一下。

由於集合中的泛型限定太多簡單就不舉例了,現在來說說介面,類,和方法中的泛型。我們常見的比如 t,e,v,k等形式的引數常用於表示泛型形參,接收來自外部使用時候傳入的型別實參

我們看乙個最簡單的泛型類和方法定義:

1

public

class

generictest 89

}1011class box

1819

public

box(t data)

2223

public

t getdata()

2627 }

對於不同傳入的型別實參,生成的相應物件例項的型別是一樣的。如:

1

public

class

generictest

1314 }

下面說說萬用字元的問題;

接著上面的結論,我們知道,box和box實際上都是box型別,現在需要繼續**乙個問題,那麼在邏輯上,類似於box和box是否可以看成具有父子關係的泛型型別呢?

為了弄清這個問題,我們繼續看下下面這個例子:

1

public

class

generictest

1516

public

static

void getdata(boxdata)

1920 }

顯然,通過提示資訊,我們知道box在邏輯上不能視為box的父類。我們需要乙個在邏輯上可以用來表示同時是box和box的父類的乙個引用型別,由此,型別萬用字元應運而生。

萬用字元一般使用?代替具體的型別實參,注意,此處是實參。而不是型別形參且box>在邏輯上是box、box...等所有box《具體型別實參》的父類。由此,我們依然可以定義泛型方法,來完成此類需求。

1

public

class

generictest

1314

public

static

void getdata(box>data)

1718 }

有時候,我們還可能聽到型別萬用字元上限和型別萬用字元下限

。具體有是怎麼樣的呢?

在上面的例子中,如果需要定義乙個功能類似於getdata()的方法,但對型別實參又有進一步的限制:只能是number類及其子類。此時,需要用到型別萬用字元上限。

1public

class

generictest

1718

public

static

void getdata(box>data)

2122

public

static

void getuppernumberdata(box extends number>data)

2526 }

此時,顯然,在**//1處呼叫將出現錯誤提示,而//2 //3處呼叫正常。 因為之前getdata(box> data); 沒有進一步進行萬用字元的限制。

型別萬用字元上限通過形如box extends number>形式定義,相對應的,型別萬用字元下限為box super number>形式,其含義與型別萬用字元上限正好相反

,在此不作過多闡述了。

JAVA中的泛型

1 泛型的基本作用 有時候建立乙個類,需要這個類中的屬性是object型別的,可以時而為string型別,時而為long型別等。比如乙個座標類point,橫座標和縱座標可能是整型,可能是浮點型,也可能是字串型別,需要輸出的結果如下 如下 package org.mole.t public class...

Java中的泛型

我們在定義的時候 就會確定資料型別 而泛型 就是是資料型別引數化 集合框架中沒有使用泛型和使用泛型的比較 沒有使用泛型 list li new linkedlist li.add 100 int x int li.get 0 system.out.println x 使用泛型 listli new ...

java中的泛型

如果乙個類裡只接受整數型別,那麼無法加入浮點型別 如果用object類物件取代整數型別,那麼編譯器就要正常判斷當前物件實際是哪一種型別,這會很浪費時間。如果用某個未指定的型別t取代整數型別,實際使用時再加入具體型別,那麼就可以處理多種型別的物件。例如 public class store publi...