Java의 파일 시스템 하위 트리를 통해 반복자를 개발해야합니다. 반복이 진행되는 동안 파일 시스템의 상태가 변경 될 수 있습니다 (예 : 새 폴더 및 파일이 생성 및 삭제됨). 따라서 이터레이터는 먼저 계층 구조의 스냅 샷을 캡처 (예 : 트리를 크롤링하고 목록에있는 모든 파일의 이름을 저장) 한 다음 스냅 샷을 반복해야합니다.파일 시스템 하위 트리의 스냅 샷에 대한 반복자
이터레이터의 생성자에 캐시를 생성하는 코드를 삽입하는 것이 좋은지 아닌지 궁금합니다. 대안은이를위한 특정 방법을 지정하는 것입니다 (이름은 init
).
반복 하위 트리의 크기와 깊이가 커질 수 있으므로 캐싱에 많은 시간이 소요됩니다. 게다가, IOException을 던질 수도있다. (Java의 생성자로부터 예외를 던지는 것이 좋은 디자인 관행인지는 아직 확신 할 수 없다.)
한편, 반복기를 초기화하는 전용 메소드를 작성하면 클라이언트 코드가 반복기를 단순히 Iterator 인터페이스의 구현으로 사용할 수 없음을 의미합니다.
클라이언트 코드는 순회하기 전에 init 메소드를 호출 할 책임이 있습니다. hasNext
/next
메서드를 먼저 가질 수 있습니다. 반복기가 초기화되었는지 확인하고 그렇지 않은 경우 init
메서드를 호출하십시오. 그러나 이러한 방법에 대한 첫 번째 호출은 클라이언트 측에서 볼 수있는 이유가없는 다음 호출보다 훨씬 느릴 수 있습니다.
그래서 당신은 파일을 반복하면서, 이러한 변화는 반복에 반영되지 않습니다 변경하는 경우 있도록 반복자가 파일 시스템의 스냅 샷을 갖고 싶어? 에서와 같이 스냅 샷을 반복하고 현재 반복에 대한 파일 시스템의 변경 사항을 무시 하시겠습니까? – palako
@ 팔라 코 : 바로. –
이제 나는 그것에 대해 생각하고있다. 어쩌면 또 다른 엔티티가 스냅 샷 생성에 책임을 져야 할 것이고, 반복자는 생성자에서 스냅 샷을 받아 들일 것이다. –