> 
> **Possible Duplicate:**  
> 
> [Why is Java's Iterator not an Iterable?](https://stackoverflow.com/questions/839178/why-is-javas-iterator-not-an-iterable) 
> 
> 
> 

We all know java's extended `for` loop:

```
List<X> list = ...
for(X x : list) { ... }

```

What I need is:

```
Iterator<X> listIterator = ...
for(X x : listIterator){ ... }

```

Java does not allow this. **I was wondering if there's a good reason why the specification does not support this**.

Here's my usecase:

I'm writing a reader for a kind of file format. Such a file contains entries that are to be read. For the sake of the example assume that I'm trying to reinvent BufferedReader and my elements are Strings.

I'm quite unhappy with the API style of the original `BufferedReader` which forces me to write ugly code like:

```
for(String line = reader.readLine(); line != null; line = reader.readLine(){
   ...
}

```

I'd rather have something nice like

```
for(String line : reader){
   ...
}

```

Of course I can make my `BufferedReader` implement `Iterable<String>`. But this implies that there is a `iterator()` method that might be called several times. Since I cannot seek in the file, I cannot really support multiple parallel iterators. 

Having my `BufferedReader` implement `Iterator<String>` instead of `Iterable<String>` seems far more reasonable. But then I can't use the `for` statement :-(