В следующем коде вызывается get()
, и он присваивается переменной, тип которой List<List<?>>
. get()
возвращает a List<List<T>>
и вызывается в экземпляре, для параметра типа T
установлено значение ?
, поэтому оно должно соответствовать.
import java.util.List;
class Test {
void foo(NestedListProducer<?> test) {
List<List<?>> a = test.get();
}
interface NestedListProducer<T> {
List<List<T>> get();
}
}
Но и IntelliJ IDEA, и Oracle javac
версия 1.7.0_45 отклоняют мой код как недействительный. Это сообщение об ошибке "javac":
java: incompatible types
required: java.util.List<java.util.List<?>>
found: java.util.List<java.util.List<capture#1 of ?>>
Почему этот код недействителен, то есть что может пойти не так, если это разрешено?