我写了简单的课:

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

  //  ...
}

但是当我尝试使用这样的foreach循环时,出现不兼容类型错误:

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

这段代码可以正常工作,但是我想要更简洁的代码,而且我不明白为什么以前的代码会返回Object。

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

它是Java的特性,因此它创建了Iterator而不是Iterator<T>还是我缺少了某些东西?

最佳答案

您的 class 必须为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();
  }

  //  ...
}

09-04 15:28
查看更多