泛型的好处就是:
适用于多种数据类型执行相同的代码
泛型中的类型在使用时指定,不需要强制类型转换



限定类型变量

静态域不可引用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/
网友评论