是否有可能检查对象是带子句的数组还是集合?我想要达到的目标:
假设数组实现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/