泛型通配符
- <? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”
Plate<? extends Fruit> p=new Plate<Apple>(new Apple());
- <? super T>:是指 “下界通配符(Lower Bounds Wildcards)”
Plate<? super Fruit> p=new Plate<Fruit>(new Fruit());

PECS(Producer Extends Consumer Super)原则:
- 频繁往外读取内容的,适合用上界Extends。
- 经常往里插入的,适合用下界Super。
Practice
**Test1 - 代码减肥
借助? extends, 把代码减肥到只是用一种方法
package generic;import java.util.ArrayList;import charactor.ADHero;import charactor.APHero;import charactor.Hero;public class TestGeneric {public static void iterate(ArrayList<Hero> list) {for (Hero hero : list) {System.out.println(hero.name);}}public static void iterateAP(ArrayList<APHero> list) {for (Hero hero : list) {System.out.println(hero.name);}}public static void iterateAD(ArrayList<ADHero> list) {for (Hero hero : list) {System.out.println(hero.name);}}public static void main(String[] args) {ArrayList<Hero> hs = new ArrayList<>();ArrayList<APHero> aphs = new ArrayList<>();ArrayList<ADHero> adhs = new ArrayList<>();iterate(hs);iterateAP(aphs);iterateAD(adhs);}}
Ans:
package generic;import java.util.ArrayList;import charactor.ADHero;import charactor.APHero;import charactor.Hero;public class TestGeneric {public static void iterate(ArrayList<? extends Hero> list) {for (Hero hero : list) {System.out.println(hero.name);}}public static void main(String[] args) {ArrayList<Hero> hs = new ArrayList<>();ArrayList<APHero> aphs = new ArrayList<>();ArrayList<ADHero> adhs = new ArrayList<>();iterate(hs);iterate(aphs);iterate(adhs);}}
