你不能,java Arrays 没有实现 Iterable:
public static int sum(Iterable<Integer> elements) {
int s = 0;
for (int i : elements) {
s += i;
}
return s;
}
public static void main(String[] args) {
L1: System.out.println(sum(1,2,3));
L2: System.out.println(sum(Arrays.asList(1,2,3)));
L3: System.out.println(sum(new int[] { 1,2,3 }));
}
这会导致(L1 和 L3)中出现两个编译时错误;所以你必须设计你的方法来接受一个迭代(集合)和/或一个数组,至少一个方法必须执行一些转换(到/从数组)
解决方法:
您可以尝试使用适配器:
public class ArrayIterator<T> implements Iterator<T> {
private final T[] array;
private int i;
public ArrayIterator(T[] anArray) {
array = anArray;
i = 0;
}
public boolean hasNext() {
return i < array.length;
}
public T next() {
return array[i++];
}
public void remove() {
throw new UnsupportedOperationException();
}
}
private static int sum(final Integer ... elements) {
return sum(new Iterable<Integer>() {
public Iterator<Integer> iterator() {
return new ArrayIterator<Integer>(elements);
}
});
}
仅在处理原始数组时才应注意;当您仅使用引用对象(您的情况)时,ArrayIterator + 匿名类很酷
希望能帮助到你