泛型的好處就是:
適用於多種數據類型執行相同的代碼
泛型中的類型在使用時指定,不需要強制類型轉換
限定類型變量
靜態域不可引用T變量 因爲靜態域先於構造方法執行
// super規定了參數的下限 只能接受蘋果、水果上類(類本身 或者是超類纔可以)
public void print(GenericTye<? super Apple> p){
}
但是Set寫入數據的時候 只能寫入紅富士蘋果、煙臺蘋果。。。(類型本身和子類類型)
// extends規定了參數的上限 只能接受紅富士蘋果、煙臺蘋果。。。(子類)
public void print(GenericTye<? extends Apple> p){
}
但是get讀取數據的時候 返回下界及本身(類本身及子類類型)
總結:“上界不存,下界不取”
綜上,我們就知道 “上界不存,下界不取” 的真實含義其實就是:
都是出於 安全考慮,
“?extends X” 主要用於安全地訪問數據。它只用來讀數據,不用來存放數據。
? super X 主要用於安全地寫入數據。它只用來寫入數據,不用來取出數據。
詳細鏈接可參考:https://www.codenong.com/js2f103e6ad4e6/