假设我有一个方法接受数组并使用 Java 内置的 for-each loop 处理其中的每个元素,像这样:
public static void myFun(SomeClass[] arr) {
for (SomeClass sc : arr) {
// Stuff is processed here
}
}
这工作得很好,但现在我希望能够将相同的方法传递给 List<SomeClass>
反而。我注定要使用 Collection.toArray(T []) ,或者是否有我可以用于 myFun()
的参数接受可以在 for-each 构造中使用的任何类型?
澄清一下:我想要一个可以接受任何可迭代对象的方法签名,无论是原始数组还是集合。我可以非常轻松地编写两个方法,一个包装另一个,但我只是想知道是否有更好的方法。
最佳答案
我建议使用Iterable
、Collection
或List
作为参数类型。
IMO,集合应该优先于引用数组。如果您碰巧有一个数组 Arrays.asList
可以很好地进行转换。 Arrays.asList
允许 gets 和 sets 回到数组,但显然不是会改变数组长度的“结构”修改。
myFun(Arrays.asList(arr));
在极端/一般情况下,您可能必须使用通配符。
public static void myFun(Iterable<? extends SomeClass> somethings) {
for (SomeClass something : somethings) {
// something is processed here
}
}
值得注意的是 Collections.toArray
和 Arrays.asList
的工作方式略有不同。 asList
保留原始数组以支持集合,因此对集合的更改将反射(reflect)在数组中。 Collections.toArray
生成集合数据的(浅)副本。如果要返回数组,制作副本通常是您想要的。不对称地,如果您作为参数传递,您通常不会复制(除非存储为字段)。
关于java - 有没有我可以在 Java 中使用的参数,它适用于所有 for-each 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769510/