代码之家  ›  专栏  ›  技术社区  ›  talex

嵌套泛型和通配符[重复]

  •  1
  • talex  · 技术社区  · 6 年前

    T1<T1<T1<?>>> v1 = null;
    T1<T1<?>> v2 = v1;
    

    我得到这个错误:

    incompatible types: T1<T1<T1<?>>> cannot be converted to T1<T1<?>>
    

    为什么我不能在这里分配?

        T1<T1<?>> v1 = null;
        T1<?> v2 = v1;
    

    没有这样的问题。

    定义 T1

    class T1<T> { }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Tomasz Linkowski    6 年前

    无法分配此项,因为 T1<T1<T1<?>>> T1<T1<?>> .

    • T1<T1<T1<?>gt;gt; T1 其类型参数
    • :的实例 T1级 其类型参数 T1<?>

    所以不能赋值,因为类型参数 T1<?&燃气轮机; 与类型参数不完全相同 T1<T1<?>gt; .

    正如约翰·韦尔尼在书中指出的那样 his comment ,你需要 T1<? extends T1<?>>

    • T1<?扩展T1<?>gt; :的实例 T1级 其类型参数为 T1<?&燃气轮机; T1<T1<?>gt; )

    :为什么可以指定 (甚至 T1<T1<T1<?>> )至 T1<?&燃气轮机; ? 因为:

    • :的实例 其类型参数可以通过

    更进一步说: T1<T1<T1<T1<?>>> T1级

    • T1<? extends T1<? extends T1<?>>
    • T1<? extends T1<?>
    • T1<?&燃气轮机;
    • Object ?

    请注意,请关注中的链接 this comment ,其中对通配符嵌套进行了更详细的解释。