当前位置: 首页 > 面试题库 >

为什么数组不能分配给Iterable?

林英朗
2023-03-14
问题内容

使用Java5,我们可以编写:

Foo[] foos = ...
for (Foo foo : foos) 

或仅在for循环中使用Iterable。这非常方便。

但是,您不能像这样编写可迭代的通用方法:

public void bar(Iterable<Foo> foos) { .. }

并使用数组调用它,因为它不是Iterable:

Foo[] foos = { .. };
bar(foos);  // compile time error 

我想知道这个设计决定背后的原因。


问题答案:

数组可以实现接口(Cloneablejava.io.Serializable)。那为什么不Iterable呢?我猜想Iterable强制添加iterator方法,而数组不实现方法。char[]甚至不覆盖toString。无论如何,应将引用数组视为不理想的-使用Lists。如dfa注释所示,Arrays.asList将为你明确进行转换。

(话虽如此,你可以调用clone数组。)



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

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

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

  • 我有以下代码 我已经阅读了(MSDN) 关键字<code>constexpr</code>在C 11中引入,并在C 14中进行了改进。它表示常量表达式。与<code>const</code>一样,它可以应用于变量,因此如果任何代码试图修改值,就会引发编译器错误。 阅读后,我认为可以使用代替,但是对于上面的代码,我收到一个编译器错误,指出 当 被 替换时,它可以正常工作。我不理解这种行为;有人能说出

  • 以下代码编译确定: 但是嵌套列表不会: 这是为什么?如果我需要这样做,“正确”的方法是什么? 用例是我有一个方法,它返回许多不同集合中的一个,其中元素类型本身是泛型的,每个可能的返回值都有不同的定义类型,其中返回值取决于传入的参数。目前,作为一种解决方法,我将结果分配给一个变量,其中类型是带有通配符的集合类型(即<code>列表

  • 我尝试使用打字稿创建 graphQl 查询模式并收到此错误消息 类型为“{name:string;movie:{type:GraphQLObjectType”的参数