Обобщения, параметры типа и подстановочные знаки
Я пытаюсь понять Java-дженерики, и они кажутся чрезвычайно сложными для понимания. Например, это нормально ...
public class Main {
public static void main(String[] args) {
List<?> list = null;
method(list);
}
public static <T> void method(List<T> list) { }
}
... как это ...
public class Main {
public static void main(String[] args) {
List<List<?>> list = null;
method(list);
}
public static <T> void method(List<T> list) { }
}
... и это ...
public class Main {
public static void main(String[] args) {
List<List<List<?>>> list = null;
method(list);
}
public static <T> void method(List<List<T>> list) { }
}
... но это не компилируется:
public class Main {
public static void main(String[] args) {
List<List<?>> list = null;
method(list);
}
public static <T> void method(List<List<T>> list) { }
}
Может кто-нибудь объяснить, что происходит на простом языке?