我想知道泛型如何在这种情况下工作,为什么
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> {}
Run Code Online (Sandbox Code Playgroud)