如果您希望能够
fourth使用自
List<List<String>>变量进行调用,则需要将签名更改为此:
private static void fourth(List<? extends List<?>> a){ System.out.println("List of a List of anything ");}将上面的工作,因为不像
List<List<?>>,
List<? extendsList<?>>是兼容
List<List<String>>。这样想:
List<List<String>> original = null;List<? extends List<?>> ok = original; // This worksList<?> ok2 = original; // So does thisList<List<?>> notOk = original; // This doesn'tList<Integer> original = null;List<? extends Number> ok = original; // This worksList<?> ok2 = original; // So does thisList<Number> notOk = original; // This doesn't
推理很简单。如果你有
private static void fourth(List<List<?>> a) { List<?> ohOh = Arrays.asList(new Object()); a.add(ohOh);}然后,如果您 可以这样 调用该方法:
List<List<String>> a = new ArrayList<List<String>>();fourth(a);String fail = a.get(0).get(0); // ClassCastException here!



