当前位置: 首页 > 知识库问答 >
问题:

为什么我不能将列表分配给列表变量?

曹季同
2023-03-14

以下代码编译确定:

List<String> strList = List.of("foo", "bar");
List<?> genList = strList;

但是嵌套列表不会:

List<List<String>> strList = List.of(List.of("foo", "bar"));
List<List<?>> genList = strList;

这是为什么?如果我需要这样做,“正确”的方法是什么?

用例是我有一个方法,它返回许多不同集合中的一个,其中元素类型本身是泛型的,每个可能的返回值都有不同的定义类型,其中返回值取决于传入的参数。目前,作为一种解决方法,我将结果分配给一个变量,其中类型是带有通配符的集合类型(即<code>列表

共有1个答案

雍马鲁
2023-03-14
List<List<String>> strList = List.of(List.of("foo", "bar"));
List<? extends List<?>> genList = strList;

这将执行您想要的操作。请注意,您不能向genList添加()任何内容(编译器无法知道您添加的任何内容对于它实际保存的列表类型都是合法的),并且您从列表中获得的任何内容()都将是List类型

然后,您可以将检索到的对象强制转换为列表

 类似资料:
  • 问题内容: 以下语句: 因错误而失败: 为什么在这里需要演员表? 我发现了几篇文章,解释了为什么您不能进行反向操作(将T分配给a),但这是显而易见的(可以理解)。 注意:我在Eclipse Luna下对此进行编码,所以我不知道这是Luna Quirk还是泛型中确实不了解的东西。 问题答案: 协方差vs协方差vs不变性 是 不变的 。 结果是, 是 不是一个亚型 的 在Java中,变量可以保存 相同

  • 我只是在进行围棋之旅,我对指针和接口感到困惑。为什么这个Go代码不编译? 也就是说,如果是一个,为什么不是一个? 我收到的错误消息是:

  • 问题内容: 我试图为对象类型分配一个lambda: 它给我一个错误的说法: 为什么会这样,怎么做? 问题答案: 这是不可能的。根据错误消息不是功能接口,即具有单个公共方法的接口,因此您需要使用引用类型,例如

  • 我要做的事 我正在使用一个名为的类和一个名为(生成一个容易记住的密码)和的函数来生成一个密码生成器,这两个函数将生成一个复杂的密码。 我的代码: 我的问题 当我运行这个程序时,我得到一个错误: 完全错误: 回溯(最近一次调用):文件“C:\users\sbenf\oneDrive\python projects\large projects\adventure_colussus_game\pass

  • 问题内容: 我一直在使用IIFE中和,并一直在使用的结构如下: 方法1: 但是,我经常看到以下情况,其中将变量分配给 方法2: 注意: 此问题 不是 关于此模式是什么或IIFE是什么。这与为什么要 在IIFE上 使用返回变量及其与Angular实践的关系有关。 在Angular方法1中工作正常,但是在我看到的许多原始JS示例中,都使用了方法2。我的假设是,封装在其中的任何内容都可以通过它进行调用。

  • 我有这样一份清单: 如何将此列表拆分为三个变量,每个变量分别保持不变