Java 为什么可以';t将包含泛型类型的泛型类型分配给通配符类型的泛型类型类

Java 为什么可以';t将包含泛型类型的泛型类型分配给通配符类型的泛型类型类,java,generics,Java,Generics,很抱歉,如果标题看起来令人困惑,但一些例子是按顺序排列的 假设我有一个带有泛型类型参数的Java类: public class GenericClass<T> { } 但是,使用具有泛型参数的类时,如果将该参数的类型设置为泛型,则不能将该类的对象分配给类型相同/泛型化的类型,而后者(内部/嵌套)参数为通配符类型: GenericClass stringy=。。。 GenericClass>generic=stringy;//编译错误 具体的编译错误是: Type mismatch

很抱歉,如果标题看起来令人困惑,但一些例子是按顺序排列的

假设我有一个带有泛型类型参数的Java类:

public class GenericClass<T> {
}
但是,使用具有泛型参数的类时,如果将该参数的类型设置为泛型,则不能将该类的对象分配给类型相同/泛型化的类型,而后者(内部/嵌套)参数为通配符类型

GenericClass stringy=。。。
GenericClass>generic=stringy;//编译错误
具体的编译错误是:

Type mismatch: cannot convert from List<GenericClass<String>> to List<GenericClass<?>>

类型不匹配:技术上无法从列表转换为列表,这是因为
List
不是
List>generic=stringy的子类型
这应该像预期的那样工作(虽然很难看…)


例如,有关您面临的问题命名的更多详细信息,请参见

List stringy=。。。
列表
is(再次显示协方差)。在这种情况下,您只能通过列表进行枚举,并期望
GenericClass<GenericClass<String>> stringy = ...
GenericClass<GenericClass<?>> generic = stringy; // Compile Error

// And just in case that is confusing, a more
// realistic example involving Collections:
List<GenericClass<String>> stringy = ...
List<GenericClass<?>> generic = stringy; // Compile Error
Type mismatch: cannot convert from List<GenericClass<String>> to List<GenericClass<?>>
List<? extends GenericClass<?>> generic = stringy
List<GenericClass<String>> stringy = ...
List<GenericClass<?>> generic = stringy;
generic.add(new GenericClass<Integer>());
 List<? extends GenericClass<?>> generic = stringy;