あなたがことはできませんが、Java配列を反復処理可能を実装していません:
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)の2コンパイル時エラーになります。あなたが反復処理可能(コレクション)、および/または配列を受け入れるように 方法を設計する必要があり、少なくとも一つの方法は、(へ/配列から)
回避策いくつかの変換を実行する必要があります。
あなたは試すかもしれ
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 +匿名クラスを使用する場合
はそれが
出典
2009-04-20 18:57:11
dfa
配列はIterableを実装していないので、残念ながら答えはいいえです。 –