d an Integer because foo0 could be pointing at a List<Double>. You can't add a Double because foo0 could be pointing at a List<Integer>. You can't add a Number because foo0 could be pointing at a List<Integer>.  