list stringlists = new list[1];
listintlist = arrays.aslist(42);
object objects = stringlists;
objects[0] = intlist;
string s = stringlist[0].get(0);
首先假設泛型陣列合法,則第一行不會出現編譯錯誤;
第一行和第二行都很容易理解,現在看第三行,可以看出這出現了多型,編譯時objects是object型別,執行時是list 型別;
第四行裡,編譯的時候,將乙個list型別的引用賦給object是沒有問題的,因為泛型也是object物件。而對於執行時,objects的型別是list,
同時因為泛型在執行時會進行擦除(list變成list,list 變成list),所以第四行可以看成是將乙個list物件賦給乙個list物件,所以執行時也不會出現問題;
現在看第五行,由於list物件呼叫get(int i)返回的是e,所以list.get(0)返回的是string並賦給string,所以編譯時不會有錯誤。
但執行時get()返回的是乙個integer,將它賦給string就會出現classcastexception;
泛型保證編譯不出錯就不會執行時出錯,而泛型陣列打破了這種諾言,所以泛型陣列不合法;
可能有人會說,上面的**為什麼不寫成下面這種,為什麼要宣告乙個object:
list stringlists = new list[1];
listintlist = arrays.aslist(42);
stringlists[0] = intlist;
string s = stringlist[0].get(0);
要是這樣的話,編譯時在第三行處就會因為將乙個list賦給乙個list出現編譯錯誤,這樣就通過編譯了;
所以可以看出,object的存在就是為了利用多型的性質使得將乙個list賦給乙個list成功。
泛型建立型別陣列
方法一 建立乙個顯式的工廠物件,獲得編譯檢查。package com.cognizant.ch15 inte ce factoryi class foo2 class intege ctory implements factoryi class widget public class factory...
C 泛型 建立泛型類 例子
public class linkedlistnode public t value public linkedlistnodenext public linkedlistnodeprev public class linkedlist ienumberable public linkedlistn...
泛型陣列的排序
下面給出部分 描述出如何對泛型陣列排序 定義結構體變數 public struct workdata 陣列宣告 red convert.toint32 txtred.text.trim blue convert.toint32 txtblue.text.trim yellow convert.toi...