Reputation: 33
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
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