가능한 중복 :확장 for 루프가 반복자에서 작동하지 않는 이유는 무엇입니까?
List<X> list = ... for(X x : list) { ... }
내가해야 할 것은 :
Iterator<X> listIterator = ... for(X x : listIterator){ ... }
Why is Java's Iterator not an Iterable?
우리 모두 자바의 알은 for
루프를 확장
자바에서는 이것을 허용하지 않습니다. 사양이이 부분을 지원하지 않는 데는 이유가 있는지 궁금합니다..
내가 파일 형식의 종류에 대한 독자를 쓰고 있어요 :
여기 내 유스 케이스입니다. 이러한 파일에는 읽을 항목이 들어 있습니다. 이 예제에서는 BufferedReader를 다시 작성하려고하고 String 요소를 사용한다고 가정합니다. 차라리 뭔가 좋은 같은 물론
for(String line : reader){
...
}
이있을 것이다
for(String line = reader.readLine(); line != null; line = reader.readLine(){
...
}
: 같은
내가 못생긴 코드를 작성하는 저를 강제로 원래 BufferedReader
의 API 스타일로 아주 불행 해요 내 BufferedReader
은 Iterable<String>
을 구현할 수 있습니다. 그러나 이는 여러 번 호출 될 수있는 iterator()
메서드가 있음을 의미합니다. 파일에서 찾을 수 없으므로 필자는 다중 병렬 반복기를 실제로 지원할 수 없습니다.
내 BufferedReader
을 구현하면 Iterable<String>
대신 Iterator<String>
을 구현하는 것이 훨씬 합리적입니다. 하지만 난. 당신은 파일을 더 다음 번에 열 수있는 여러 병렬 반복자를 지원할 수 물론
고급 루프가 "반복기"방법을 여러 번 호출하는지 확인 했습니까? 나는 그것이 단지 한 번만한다고 가정 할 것이다. –
제목 질문에 대한 대답은 "그것이 언어가 정의 된 방식이기 때문에"이다. –
다시 말하지만, 나는 그것이 복제본이라는 것에 동의하지 않습니다. 나는 두 인터페이스의 차이점을 잘 알고 있습니다. 이 차이가 for 루프와 관련하여 왜 중요한지 묻습니다. 나는 또한 그것의 지정이 이런 식으로 알고있다. 나는 그것이 왜 이렇게 지정되었는지 궁금합니다. – Stefan