我了解 PECS(生产者扩展,消费者超级)的概念,但仍然对这些符号感到困惑:
public class PECSTest {
public static void main(String[] args) {
//List<? extends Object> ProducerList = new ArrayList<String>();
//ProducerList.add("1"); // Line 1 :compileTimeError
PECSTest myTest = new PECSTest();
List<String> myList = new ArrayList<String>();
myList.add("abc");
myTest.printMyList(myList);
}
private void printMyList(List<? extends Object> myList) {
// TODO Auto-generated method stub
int i=0;
while(i<myList.size()) {
System.out.println(myList.get(i).getClass()); //Line 2
System.out.println(myList.get(i).charAt(0)); // Line 3
System.out.println(myList.get(i).equals(new String("abc")));
i++;
}
}
}
- 即使我已经创建了一个可以接受任何扩展 Object 类的对象的列表,但是当我尝试添加字符串时,它在第 1 行给出了编译时错误。为什么?
- 在第二种情况下,当我将 List 传递给 printMyList 方法时,它会在第 2 行打印 String 中的每个元素类类型,但是在第 3 行,为什么我无法调用任何 String 类特定的方法,例如charAt。还有为什么不需要对 String 进行强制转换。
同样在消费者的情况下
List<? super Number> myList = new ArrayList<Object>();
myList.add(new Object());// compile time error
为什么我不能在 myList 中添加对象。因为如果我们使用 super 这意味着这个列表可以包含等于和高于 Java 类层次结构中的数字的对象。所以 new Object() 应该根据该语句添加到列表中。
谢谢。