JAVA泛型的上界通配符、下界通配符

102 阅读1分钟
  • 假设Class Apple extends Fruit extends Food
  • 上界通配符:<? extends T>
    • ArrayList<? extends Fruit>: 表示这个 ArrayList 可能是 ArrayList<Fruit>ArrayList<Apple>
    • 上界不能setadd: 例如你想往ArrayList<? extends Fruit>add一个Apple,因为ArrayList<? extends Fruit>可能是ArrayList<Fruit>,所以是不行的。
    • 上界可以get: 因为ArrayList<Fruit>ArrayList<Apple>中的元素都可以用Fruit接收
  • 下界通配符:<? super T>
    • ArrayList<? super Fruit>: 表示这个 ArrayList 可能是 ArrayList<Fruit>ArrayList<Food>
    • 下界可以setadd: ArrayList<Fruit>ArrayList<Food>都可以add一个Fruit
    • 下界不可get: Fruit没办法接收 ArrayList<Food>的元素
  • PECS(Producer Extends Consumer Super)原则
    • 频繁往外读取内容的,适合用上界extends
    • 经常往里插入的,适合用下界super