У меня есть класс Java следующего вида:Java Итератор для примитивных типов
class Example {
private byte[][] data;
public Example(int s) { data = new byte[s][s]; }
public byte getter(int x, int y) { return byte[x][y]; }
public void setter(int x, int y, byte z) { byte[x][y] = z; }
}
Я хотел бы быть в состоянии внешне перебирать частные данные с использованием итератора так:
for(byte b : Example) { ;/* do stuff */ }
Я попытался реализовать частный класс итератора, но я столкнулся с проблемами:
private class ExampleIterator implements Iterator {
private int curr_x;
private int curr_y;
public ExampleIterator() { curr_x=0; curr_y=-1; }
public boolean hasNext() {
return curr_x != field.length-1
&& curr_y != field.length-1; //is not the last cell?
}
public byte next() { // <-- Error is here:
// Wants to change return type to Object
// Won't compile!
if(curr_y=field.length) { ++curr_x; curr_y=0; }
return field[curr_x][curr_y];
}
public void remove() { ; } //does nothing
}
Как бы реализовать внешний итератор для примитивных типов (не generics)? Возможно ли это на Java?
Есть ли аналог 'Iterable' для примитивных типов, поэтому я могу сделать' for (double d: myContainerWithDoubles) {} '? –
Для каждого примитивного итератора нет. Лучшее совпадение - реализовать 'PrimitiveIterator.OfDouble' и использовать его функционально. – Oroboros102