public class Foo { public static void main(String[] args) { // Read for E, Write for S // 读取时使用 extends, 写入时使用 super Foo foo = new Foo(); List<Integer> ints = new ArrayList<>(); foo.read(ints); List<? super Number> unknown = new ArrayList<>(); foo.write(unknown); } // Read for E // 用于读场景, 取出的所有元素的都向上转型为T,这里T为Number类型 public void read(List<? extends Number> nums) { Number one = nums.get(0); Number two = nums.get(1); for (Number num : nums) { // do sth for num } } // Write for S // 用于写场景,可以添加T的子类型,这里T为Number类型 public void write(List<? super Number> nums) { nums.add(1); nums.add(3.14); nums.add(new BigDecimal(100)); }}