首页 > 编程笔记 > Java笔记

迭代器模式在MyBatis源码中的应用

迭代器模式在 MyBatis 中也是必不可少的,下面来看 DefaultCursor 类,源码如下。
public class DefaultCursor<T> implements Cursor<T> {
    ...
    private final CursorIterator cursorIterator = new CursorIterator();
    ...
}
DefaultCursor 实现了 Cursor 接口,且定义了一个成员变量 cursorIterator,其类型为 CursorIterator。

继续查看 CursorIterator 类的源码实现,它是 DefaultCursor 的一个内部类,实现了 JDK 中的 Iterator 接口,源码如下。
private class CursorIterator implements Iterator<T> {
    T object;
    int iteratorIndex;

    private CursorIterator() {
        this.iteratorIndex = -1;
    }

    public boolean hasNext() {
        if (this.object == null) {
            this.object = DefaultCursor.this.fetchNextUsingRowBound();
        }

        return this.object != null;
    }

    public T next() {
        T next = this.object;
        if (next == null) {
            next = DefaultCursor.this.fetchNextUsingRowBound();
        }

        if (next != null) {
            this.object = null;
            ++this.iteratorIndex;
            return next;
        } else {
            throw new NoSuchElementException();
        }
    }

    public void remove() {
        throw new UnsupportedOperationException("Cannot remove element from Cursor");
    }
}

所有教程

优秀文章