Iterator<T> returns Object

generics, iterator, java

Solution

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();
  }

  //  ...
}

Problem

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?

Original source