我正在try 将下面的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);
}

...

推荐答案

通过使用IterableMixin,您只需要实现iterator函数.

class ChessSquares with IterableMixin<ChessSquare> {
    @override
    Iterator<ChessSquare> get iterator => new ChessSquaresIterator(bits);
    ...
}

访问http://blog.sethladd.com/2013/03/first-look-at-dart-mixins.html,了解有关Mixin的简短介绍.

Iterator接口是直截了当的.您只需实现函数moveNext和获取器current.

Dart相关问答推荐

polymer.dart 中的@observable 和@published 有什么区别?

您如何在元素中设置自定义元素标签的样式?

dart nullsafey 和使用旧包

Flutter 错误:主体可能正常完成,导致返回null,但返回类型可能是不可为空的类型

在 Dart 的 Cloud Firestore 中添加文档后如何获取文档 ID

如何从 Dart 中的映射中过滤空值

Flutter Expansion Tile -- 标题 colored颜色 变化和尾随动画箭头 colored颜色 变化

Flutter.io (dart) - 如何创建左填充覆盖?

dart:类构造函数被标记为const是什么意思

dart中整数的最大值是多少?

如何在dart中获取 map 的键列表?

错误:无法调用需要 const 表达式的非const构造函数

Dart null 安全性不适用于类字段

断言失败时如何在 Dart 中打印消息?

Dart 中的snapshot快照概念是什么?

dart中的max/mi int/double 值是否有常数?

Dart vs Polymer vs Bootstrap

Dart 中的 urlencoding

从函数返回多个值

如何在 Dart 中获取时间戳?