的快照,我需要在Java中的文件系統子樹開發迭代器。迭代仍在進行中時,文件系統的狀態可能會發生變化(例如,新文件夾和文件被創建並刪除)。迭代器因此應該首先捕獲層次結構的快照(例如,爬取樹並將找到的所有文件的名稱保存到列表中),然後迭代快照。迭代器在文件系統樹
我想知道,如果它是一個好主意,還是不要把代碼來創建緩存到迭代器的構造函數。另一種方法是指定對於一個speciall方法(名爲init
)。
的大小和迭代子樹的深度可能會相當大,因此緩存將是費時。此外,它可能會拋出IOExceptions(我仍然不確定在Java中如何從構造函數中拋出異常是一個很好的設計實踐)。
在另一方面,建立一個專門的方法來初始化迭代器將意味着客戶端代碼不能使用迭代器一樣簡單Iterator接口的實現。
客戶端代碼也將是負責調用之前遍歷init方法。我能有hasNext
/next
方法首先確保迭代器已初始化,如果沒有,從它們內部調用init
方法。但是這意味着對這些方法的第一次調用將比沒有任何理由在客戶端可見的下一個方法慢得多。
所以,你想你的迭代器有文件系統的快照,以便如果文件更改而迭代,這些變化不會反映在迭代?如在中,您想迭代快照並忽略當前迭代對文件系統的更改嗎? – palako
@palako:的確如此。 –
現在,我在想,也許另一個實體應負責創建快照,迭代器將只接受在它的構造函數中的快照。 –