我需要在 Java 中的文件系统子树上开发一个迭代器。当迭代仍在进行时,文件系统的状态可能会发生变化(例如,创建和删除新文件夹和文件)。因此,迭代器应该首先捕获层次结构的快照(例如爬取树并将找到的所有文件的名称保存到列表中),然后迭代快照。
我想知道将创建缓存的代码放入迭代器的构造函数中是否是个好主意。另一种方法是为此指定一个特殊的方法(命名init
)。
迭代子树的大小和深度可能会变得非常大,因此缓存会很耗时。此外,它可能会抛出 IOExceptions(我仍然不确定从 Java 的构造函数中抛出异常是否是一种好的设计实践)。
另一方面,创建一个专用的方法来初始化迭代器意味着客户端代码不能将迭代器用作迭代器接口的简单实现。
客户端代码还将负责在遍历之前调用 init 方法。我可以让hasNext
/next
方法首先确保迭代器已初始化,如果没有,init
则从其中调用该方法。但这意味着对这些方法的第一次调用将比下一次调用慢得多,而客户端没有任何可见的原因。