我正在尝试将下面的Java代码移植到Dart,我很困惑这样做.
在Java中,Iterable接口是使用一种方法清理的地方,并且实现这一点非常简单.
这段代码如何最好地转换为Dart?
/**
* Chess squares represented as a bitmap.
*/
public class ChessSquares implements Iterable<ChessSquare> {
private static class ChessSquaresIterator implements Iterator<ChessSquare> {
long bits;
int nextBit;
public ChessSquaresIterator(long bits) {
this.bits = bits;
nextBit = Long.numberOfTrailingZeros(bits);
}
@Override
public boolean hasNext() {
return (nextBit < 64);
}
@Override
public ChessSquare next() {
ChessSquare sq = ChessSquare.values()[nextBit];
bits = bits & ~sq.bit;
nextBit = Long.numberOfTrailingZeros(bits);
return sq;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
@Override
public Iterator<ChessSquare> iterator() {
return new ChessSquaresIterator(bits);
}
...
Run Code Online (Sandbox Code Playgroud)
通过使用IterableMixin你只需要实现iterator-function.
class ChessSquares extends Object with IterableMixin<ChessSquare> {
Iterator<ChessSquare> iterator() => new ChessSquaresIterator(bits);
...
}
Run Code Online (Sandbox Code Playgroud)
访问http://blog.sethladd.com/2013/03/first-look-at-dart-mixins.html,获取有关mixins的简短介绍.
该Iterator-interface是直线前进.您只需要实现函数moveNext和getter current.
| 归档时间: |
|
| 查看次数: |
2022 次 |
| 最近记录: |