Dan*_*Lew 7 java foreach iterator
假设我有一个接受数组并使用Java内置for-each循环处理其中每个元素的方法,如下所示:
public static void myFun(SomeClass[] arr) {
for (SomeClass sc : arr) {
// Stuff is processed here
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但现在我希望能够传递相同的方法List<SomeClass>
.我注定要使用Collection.toArray(T []),还是我可以使用的参数myFun()
接受任何可以在for-each构造中使用的类型?
澄清:我想要一个接受任何可迭代对象的方法签名,无论是原始数组还是Collection.我可以很容易地编写两种方法,一种方法包装另一种方法,但我只是好奇是否有更好的方法.
我建议使用Iterable
,Collection
或List
作为参数类型.
IMO,集合应该优先于引用数组.如果你碰巧有一个数组Arrays.asList
,转换很好.Arrays.asList
允许获取并返回到数组,但显然不是"结构"修改会改变数组长度.
myFun(Arrays.asList(arr));
Run Code Online (Sandbox Code Playgroud)
您可能必须在极端/一般情况下使用通配符.
public static void myFun(Iterable<? extends SomeClass> somethings) {
for (SomeClass something : somethings) {
// something is processed here
}
}
Run Code Online (Sandbox Code Playgroud)
值得注意的是Collections.toArray
,Arrays.asList
工作略有不同.asList
保持原始数组支持集合,因此对集合的更改将反映在数组中.Collections.toArray
制作集合数据的(浅)副本.如果要返回数组,那么复制通常是您想要的.不对称,如果您作为参数传递,通常不会复制(除非存储为字段).
归档时间: |
|
查看次数: |
3194 次 |
最近记录: |