泛型(比较杂 后期整理)
泛型:
泛型傳參得有繼承關系
泛型重寫有橋方法
泛型會擦除 集合getclass 是同一個 但是集合內元素getclass 用get返回的不是Object 因為內部強轉
泛型不能創建泛型數組
泛型有通配符來限制傳參的范圍
泛型有T的模板
泛型通配符中傳參中的 添加(類型安全問題) get操作(只有super有權限添加 其他的只能查看)
泛型子類父類繼承 對應有重寫內容
子類T 父類T 子類無和父類具體泛型
靜態的函數不能使用類上自定義的泛型,如果靜態函數需要使用,必須要在函數上自定義泛型。
注意多態問題 舉例:
class person{
public T a(T az) {
System.out.println(“futher”);
return az;
}
}
class son extends person{
}
類型擦除后 Object和Integer是不同參數照例來說應該是重載
實際上是重寫 因為有個橋方法 自動生成的 里面引用了 子類中的那個重寫方法 將Integer
轉換為Object
泛型參數的時候要考慮是否有繼承關系 就
List和List是沒有的 因為泛型有兩個維度 是不同的對象 沒有繼承關系
而通配符可以兩個維度一起擴展
List a=new ArrayList();
a.getclass 和a.get(0).getclass 不一樣 因為get會根據傳參強轉回來
不會發生協變
數組是協變的
因為泛型在編譯后都是消除了泛型內容 都是原始類型 那么可以通過反射可以往Integer存儲
字符串 如果類型的變量有限定那么原始類型就用第一個邊界的類型變量代替
編譯器是先通過檢查代碼中泛型的類型 再進行類型擦除 再進行編譯的
類型檢查是正對引用的 而無關它真正引用的對象
get里面會進行自動類型轉換 會根據泛型變量進行強轉
方法重載如果是用泛型那么實際上是重寫了
泛型類型變量不餓能是基本類型
不能實例化泛型類型
不能創建泛型數組
上界通配符后不能往集合添加元素 取出的元素也是上界父元素 add受限制
下屆通配符 可以添加元素 必須是子類或者本身 取出的元素類型都是Object get受限制
獲取數據用extend通配符 添加數據用super通配符
兩個都想就不別用通配符
不能通過是聲明泛型通配符上界和下界
由于 box 是一個 Box
總結
以上是生活随笔為你收集整理的泛型(比较杂 后期整理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五周第一次课(4月18日)
- 下一篇: 云监控之运维篇