Я хочу знать, как дженерики работают в такой ситуации и почему Set<? extends Foo<?>> set3 = set1;
Set<? extends Foo<?>> set3 = set1;
разрешено, но Set<Foo<?>> set2 = set1;
не является?
import java.util.HashSet;
import java.util.Set;
public class TestGenerics {
public static <T> void test() {
Set<T> set1 = new HashSet<>();
Set<?> set2 = set1; // OK
}
public static <T> void test2() {
Set<Foo<T>> set1 = new HashSet<>();
Set<Foo<?>> set2 = set1; // COMPILATION ERROR
Set<? extends Foo<?>> set3 = set1; // OK
}
}
class Foo<T> {}