一、上界通配符上界通配符? extends T表示 T 或 T 的任意子类型只能读取不能写入List?extendsNumberlistnewArrayListInteger(List.of(1,2,3));Numbernumlist.get(0);// 安全读取为 Number// 不能写入 Integer 类型因为无法确定具体类型list 可能是 ListInteger也可能是 ListDouble 等publicvoidtest_write(List?extendsNumberlist){list.add(newInteger(100));}// 除了写入 nullpublicvoidtest_write(List?extendsNumberlist){list.add(null);}二、下界通配符下界通配符? super T表示 T 或 T 的任意父类型List?superIntegerlistnewArrayListNumber();list.add(newInteger(1));// 安全Integer 是 Number 子类// 只能读取为 Object因为无法确定具体类型list 可能是 ListInteger也可能是 ListNumber 等publicvoidtest_read(List?superIntegerlist){Objectobjlist.get(0);}三、无界通配符无界通配符?表示任意类型只读为 Object// 不能写入因为无法确定具体类型list 可能是 ListDog也可能是 ListCat 等// 只能读取为 Object因为无法确定具体类型list 可能是 ListDog也可能是 ListCat 等voidprocess(List?list){for(Objectobj:list){}}PECS 原则PECS全称 Producer Extends Consumer Super用于指导泛型通配符的使用Producer Extends生产者使用上界通配符作为返回类型Consumer Super消费者使用下界通配符作为参数类型