【问题标题】:Java Generics Cast to Wildcard RulesJava 泛型转换为通配符规则
【发布时间】:2018-08-07 15:40:55
【问题描述】:

在简单的情况下,我可以轻松地从泛型类型降级为通配符类型:

List<Integer> intList = new ArrayList<>();
List<?> wildList = intList; // I can cast to a List<?>

但是,随着我的泛型变得越来越复杂:

List<List<Integer>> nestedIntList = new ArrayList<>();
List<List<?>> nestedWildList = nestIntList; // This does not compile

有没有办法可以编译?我是否遗漏了编译器保护我免受某些合乎逻辑的情况?为什么我不能转换内部类型?

【问题讨论】:

    标签: java generics wildcard


    【解决方案1】:

    List&lt;Integer&gt; 可分配给List&lt;?&gt;List&lt;? extends Integer&gt;。同样,您可以将其分配给List&lt;? extends Number&gt;,但不能分配给List&lt;Number&gt;

    在类似的行上,您只能将List&lt;List&lt;Integer&gt;&gt; 分配给List&lt;? extends List&lt;?&gt;&gt;

    见:

    Is List&lt;Dog&gt; a subclass of List&lt;Animal&gt;? Why are Java generics not implicitly polymorphic?

    Java generics, nested collection of wildcard

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多