是否有可能检查对象是带子句的数组还是集合?我想要达到的目标:

假设数组实现Iterable,并假定Object foo可以是数组或集合,则我想使用如下代码片段:

if (foo instanceof Iterable) {
  for (Object f : (Iterable) foo) {
    // do something with f
  }
}

不幸的是,数组不能转换为Iterable。它也没有实现Collection。是否还有其他可能像上述那样在一个循环中处理这两个问题?当然,而不是使用if-else if-clause和两个循环(这不是很好)。

编辑:针对这些答案。我知道isArray()方法,但是在这种情况下,
...
for (Object f : (Iterable) foo) {
...

将失败。遗憾和代码冗余,因为尽管foreach循环可用于Collections和Arrays,但我必须使用两个循环。

最佳答案

其他答案都在努力回答原始标题问题:



但是您真正的问题在体内:



答案是:不,无法编写一个遍历集合和数组的for循环。

您可以跳过一堆箍将数组转换为列表,但是几乎可以肯定,与仅编写两个(或更多)循环相比,最终会产生更大的困惑。调用getClass().isArray()会告诉您所拥有的内容,但是如果没有某种类型的转换,您仍然无法使用它。 Arrays.asList()对基本数组不起作用。

关于java - 我可以编写一个遍历集合和数组的for循环吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55588278/

10-13 08:21
查看更多