rec*_*nja 8 java primitive autoboxing iterator private-members
我有一个以下形式的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; }
}
Run Code Online (Sandbox Code Playgroud)
我希望能够使用像这样的迭代器外部迭代私有数据:
for(byte b : Example) { ;/* do stuff */ }
我试图实现一个私有的Iterator类,但我遇到了问题:
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
}
Run Code Online (Sandbox Code Playgroud)
我如何为原始类型(非泛型)实现外部迭代器?这在Java中可行吗?
迭代器不能产生基本类型的值.但是,它可以产生包装类型的值Byte.这样的值可以自动拆箱到byte(只要他们不是null).
private class ExampleIterator implements Iterator<Byte> {
public boolean hasNext() { ... }
public Byte next() { ... }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
for (byte b : example) { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6483 次 |
| 最近记录: |