您可以 _添加_一个
Double,因为无论类型参数
E是什么,它都可以保证是
Number或超类型…这意味着您可以肯定地从转换
Double为
E。您将无法执行以下操作:
Number x = psupn1.get(0);
虽然。
考虑一下,然后尝试创建在逻辑上将其破坏的列表。例如,您不能使用:
// InvalidArrayList<? super Number> psupn1 = new ArrayList<Integer>();psupn1.add(new Double(2));
因为
Integer既不 是
Number父类型 也不 是父类型-它是子类。你可以写:
// ValidArrayList<? extends Number> psupn1 = new ArrayList<Integer>();
…因为那是相反的方式。那时您可以写:
Number x = psupn1.get(0);
因为列表中的任何元素都保证可以转换 为
Number。它涉及 到 需要转换的方式-转换为泛型类型参数或 从中 进行转换。



