對於泛型,不要求怎麼使用,要求看原始碼時能看懂就行。
泛型的意義:
1,自動進行型別的檢查
2,自動進行型別的轉換
泛型的一些重點:
1,泛型時怎麼編譯的?擦除機制--object
2,泛型的型別 不參與型別的組成
3,泛型的引數不能是簡單型別
看乙個簡單的泛型示例:
class myarraylist
public void push(t val)
public t get()
}public class testdemo
}
然後是泛型類的上界是什麼?寫成靜態方法怎麼寫
class genericalg
}return max;
}}//靜態方法:
class genericalg2
}return max;
}}public class testdemo2 ;
system.out.println(genericalg2.maxvalue(array));
system.out.println(genericalg2.maxvalue(array));
//不寫integer會根據實參型別判斷
}public static void main1(string args) ;
genericalggla = new genericalg<>();
system.out.println(gla.maxvalue(array));
genericalg2.maxvalue(array);
}}
萬用字元:? (通常出現在原始碼中)看差別 萬用字元:原始碼當中
泛型的區別:
1,萬用字元一般用於讀取
2,萬用字元不僅有上界 <? extends 上界》 還有下界 <? super 下界》
class myprint
}}class myprint2
}}
邊界問題:
只接受 number 的子型別作為 e 的型別實參
沒有指定型別邊界 e,可以視為 e extends object
public class myarraylist
myarraylistl1; // 正常,因為 integer 是 number 的子型別
myarraylistl2; // 編譯錯誤,因為 string 不是 number 的子型別
父子型別:
<>裡面的東西不參與型別的組成,雖然object是number的父類,但在泛型上就不是了
需要使用萬用字元來確定,<?>會被擦除為
public class myarraylist
// myarraylist不是 myarraylist的父型別
// myarraylist也不是 myarraylist的父型別
// 需要使用萬用字元來確定父子型別
// myarraylist<?> 是 myarraylist<? extends number> 的父型別
// myarraylist<? extends number> 是 myarraylist的父型別
內部類:1,例項內部類 2,靜態內部類3,匿名內部類 4,本地內部類
1,例項內部類
例項資料成員是什麼?普通的成員屬性不加static
如何拿到乙個例項內部類物件?
不能在例項內部類當中定義乙個靜態變數,
class outerclass
}}//怎麼去拿到實力內部類的乙個物件
public class testdemo
}
2,靜態內部類
class outerclass
public void test()
}}
3.匿名內部類
class outclass
}public class testdemo
}.test();
}}
4.本地內部類:沒人寫
class outclass
}public class testdemo
}}
內部類和泛型
內部類就是在類中的類。在原始碼中經常看到,但是原始碼中常見的都是靜態內部類,最常見的型別就是資料型別a.資料型別b,也就是a.b 這種型別。1 threadlocal.threadlocalmap 2 map中的各種靜態結構等等 3 獲取得到單例物件在以前學習j a的時候,我們通常喜歡在乙個類外面定...
C 泛型內部原理
泛型相當於c 的模板 泛型方法 static void fly t i,k t 泛型委託 delegate void mydelegate t1 t1,t2 t2 net中的func 泛型 eventhandler 委託事件 泛型約束 約束父類或者介面 aaawhere t idbconnectio...
內部類 成員內部類 區域性內部類 匿名內部類
public class 外部類 private int num 0 外部類如果要訪問內部類的成員,則需要通過內部類的物件訪問 使用方式 1.外部類使用內部類,主函式再使用外部類 2.通過new的方式 外部類.內部類 物件名 new 外部類 new 內部類 定義在方法內部的類,就是區域性內部類,只有...