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?