user3305062
user3305062

Reputation: 33

Iterator<T> returns Object

i wrote simple class:

public class Report<T> implements Iterable {
  private ObservableList<T> items = FXCollections.observableArrayList();
  // ...

  public ObservableList<T> getItems() {
    return items;
  }

  public Iterator<T> iterator {
    return items.iterator();
  }

  //  ...
}

But when i try to use foreach loop like this i get Incompatible types error:

Report<FinRecord> report = new Report<>()
for (FinRecord r : report) {
    // ...
}

This code works fine, but i wanted cleaner code and i don't understand why previous code returns Object.

for (FinRecord r : report.getItems()) {
    // ...
}    

Is it java's peculiarity, so it creates Iterator not Iterator<T> or i am missing something?

Upvotes: 3

Views: 118

Answers (1)

Martijn Courteaux
Martijn Courteaux

Reputation: 68847

Your class has to implements Iterable<T>.

public class Report<T> implements Iterable<T>
{
  private ObservableList<T> items = FXCollections.observableArrayList();
  // ...

  public ObservableList<T> getItems() {
    return items;
  }

  public Iterator<T> iterator() {
    return items.iterator();
  }

  //  ...
}

Upvotes: 9

Related Questions