深入了解泛型

2021-06-15 02:44:51 字數 1904 閱讀 9739

泛型是為編譯器用的

例如arraylistcollection = new arraylist();

collection.add("abb");//編譯器會報錯

//通過反射

collection.getclass().getmethod("add",object.class).invoke(collection,"sd");

因為編譯器編譯後會去掉泛型,所以在記憶體中不存在泛型

collectionc = new vector();警告

collectionc= new vector();警告

collectionc = new vector();錯誤

collectionc = new vector();錯誤

表示任意型別

publicstatic void printcollection(collection<?> cols)

publicstatic void printcollection(collectioncols)

使用?萬用字元可以引用其他各種引數化的型別,?萬用字元的作用主要用作引用

,可以呼叫與引數化無關的方法,不能呼叫與引數化有關的方法

限定vector<?extendsnumber> x = new vector();//正確,必須是number的子類或者本身

vector<?extendsnumber> x = new vector< string >();//錯誤

vector<?superinteger> x = new vector();//正確,必須是integer的父類或者本身

vector<?superinteger> x = new vector();//錯誤

a<?>= new a();可以,反過來不可以

編譯器不允許建立型別變數的陣列

vectorlist = new vector[10];//錯誤

hashmapmap = new hashmap)();

map.add("sd",1);

map.add("s",3);

map.add("sdd",4);

set>entryset = map.entryset();

for(map.entryentry:entryset)

泛型先定義後使用

publicstatic void swap(t a ,int i,int j)

swap(newstring("s","s"),0,1);//正確

swap(newint,2,3);//錯誤,因為基本資料型別不能作為t實際型別

privatestatic tconvertobj(object obj)

privatestatic void arr(t a,t v) }

privatestatic void printcollection(collectioncols,t t)

privatestatic void copydata(t arr,collectioncols) }

publicclss dao

publicvoid delete(t t){}

publicvoid update(t t){}

publicsetfindbyconditions(string where)

publicstatic void update(t t){}//出錯,靜態不能用類泛型,除非單獨定義泛型因為靜態方法單獨存在}

可以保證t是同一種型別,因為是在類上定義的

如果是publicvoid delete(t t){}

publicvoid udpate(t t){}

則就不能保證是同乙個型別

daoda = new dao();

vectorv ;無法通過v本身來得到

可以把v放在乙個方法裡

publicstatic void main()

Java反射 方法的反射 深入了解泛型

invoke 物件,引數列表 1 獲得類型別 class data a.getclass 2 獲得方法 getmethod 方法名 可變引數 class 獲得自身和繼承的public方法 getdeclaredmethod 方法名 可變引數 class 獲得自身的所有方法,不包括繼承的方法 meth...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...