Java中泛型的應用總結

2021-06-16 16:39:20 字數 1203 閱讀 1704

1 基本使用

public inte***ce list

2 泛型與子類

child是parent的子類,list卻不是list的子類。

因此:listlist = new arraylist()是錯誤的。

如果上面是正確的,那麼:

listls = new arraylist(); //1

listlo = ls; //2

lo.add(new object()); // 3

string s = ls.get(0); // 4,將object轉換為string將失敗。

3 wildcards

因為2的原因,下面的實現用於統配集合的輸出是不行的

void printcollection(collectionc) }

因此,需要萬用字元?:

void printcollection(collection<?> c)

} // ok

此處的?表示型別未知,但是任何物件均是object,因此上例的1是正確的。但下例卻是錯誤的:

void add(collection<? extends myclass> c) // ok

原因也很明確,? extends myclass說明型別是myclass的子類,但是卻並不知道具體型別

4. 泛型方法

上例可以實現為:

add(collectionc, t t)

編譯器在保證語義的前提,會幫忙做型別的轉換工作。

5. 泛型執行時的對比

listl1 = new arraylist();

listl2 = new arraylist();

system.out.println(l1.getclass() == l2.getclass()); // true

因為泛型類執行時時一樣的。

6 泛型陣列(可能導致型別不安全)

list lsa = new arraylist[10]; // error

如果可以的話,可能導致型別不安全。如:

object o = lsa;

object oa = (object)o;

listli = new arraylist();

li.add(new integer(3));

oa[1] = li;

string s = lsa[1].get(0); // runtime error

JAVA泛型應用

泛型介面 a.介面上自定義的泛型引數的具體資料型別,是在 其實現類 實現該介面 的時候指定的。b.若在實現該泛型介面的時候,未指定具體的資料型別,則預設為object c.有些時候我們在定義乙個類去實現泛型介面時,我們並不確定這個類將要實現哪種型別的類,這時我們就不能確定介面中的泛型,那麼介面中的泛...

Java 泛型總結

泛型指引數化型別的能力,可以定義帶泛型型別的類或方法,隨後編譯器會用具體的型別來替換它。在泛型產生之前,像集合的訪問都是靠強制型別轉換 public class arraylist public void add object o string filename string names.get 0...

Java泛型總結

1 泛型主要是用來年解決資料型別安全的問題,用標識來代替屬性的型別或者返回值的型別 2 在使用泛型的時候可以有以下幾種形式 泛型介面 泛型類 萬用字元做泛型引數 泛型方法 泛型陣列 3 以下通過 說明 package com.sun.demo 一 定義泛型介面 inte ce father 二 定義...