泛型和原生型別

2021-08-27 23:15:31 字數 1419 閱讀 4869

//泛型類的內部類可以訪問到其外圍類的型別引數。

//當你在乙個泛型類中巢狀另乙個泛型類時,最好為它們的型別引數設定不同的名字,即使那個巢狀類是靜態的也應如此。

class linkedlist

} public void add(e e)

public void dump()

*/ //使用靜態類

private nodehead = null;

private static class node

} public void add(e e)

public void dump()

}

//乙個原生型別很像其對應的引數化型別,但是它的所有例項成員都要被替換掉,

//而替換物就是這些例項成員被擦除掉對應部分引數型別之後剩下的東西。

//具體地說,在乙個例項方法宣告中出現的每個引數化的型別都要被其對應的原生部分所取代。

//原生型別list 和引數化型別list是不一樣的。

//如果使用了原生型別,編譯器不會知道在list 允許接受的元素型別上是否有任何限制,它會允許你新增任何型別的元素到list 中。

//list<?>是一種特殊的引數化型別,被稱為萬用字元型別(wildcard type)。

//像原生型別list 一樣,編譯器也不會知道它接受哪種型別的元素,但是因為list<?>是乙個引數化型別,

//從語言上來說需要更強的型別檢查。為了避免出現classcastexception 異常,編譯器不允許

//你新增除null 以外的任何元素到乙個型別為list<?>的list 中。

//原生型別的成員被擦掉,是為了模擬泛型被新增到語言中之前的那些型別的行為。

//如果你將原生型別和引數化型別混合使用,那麼便無法獲得使用泛型的所有好處,

//而且有可能產生讓你困惑的編譯錯誤。另外,原生型別和以object為型別引數的引數化型別也不相同。

@suppresswarnings("rawtypes")

pair p = new pair(23, "skidoo");

system.out.println(p.first() + " " + p.last());

//編譯錯誤:因為pair p被宣告為原生型別,擦除了所有的<>引數化型別資訊,stringlist()方法返回值型別為list,而不是list。

//for (string s : p.stringlist())

for (object s : p.stringlist())

system.out.print(s + " ");

class pair

public t first()

public t last()

public liststringlist()

}

C 泛型型別 泛型方法

泛型會宣告型別引數 泛型的消費者需要提供型別引數來把佔位符型別填充 public class stack var stack newstack int stack.push 2 stack.push 3 int x stack.pop 2int y stack.pop 3stack open typ...

泛型 泛型簡介和泛型類

在泛型引入之前,如果我們需要產生多個物件,每個物件的邏輯完全一樣,只是物件內的成員變數的型別不同,那麼我們只能建立多個類檔案,給每個類的成員變數設定不同的資料型別。這麼做會導致類的膨脹,重用性太差。一種方式是對將object作為變數型別,但是需要對獲取的資料進行強制型別轉換,這個過程可能導致型別轉換...

LINQ和泛型型別 C

linq 查詢基於泛型型別,在 net framework 的 2.0 版中引入了泛型型別。您無需深入了解泛型即可開始編寫查詢。但是,您可能需要了解兩個基本概念 當您建立泛型集合類 如 list of t 的例項時,您將 t 替換為列表將包含的物件的型別。例如,字串列表表示為 list custom...