参数化类型的空集合上的 Java 迭代器

2022-09-01 09:08:52

在Java中,我需要从我的方法返回一个迭代器。我的数据来自另一个对象,该对象通常可以为我提供迭代器,因此我可以只返回该对象,但在某些情况下,基础数据为空。为了保持一致性,我希望在这种情况下返回一个“空”迭代器,这样我的调用方就不必测试null。

我想写这样的东西:

public Iterator<Foo> iterator() {
   if (underlyingData != null) {
      return underlyingData.iterator();  // works
   } else {
      return Collections.emptyList().iterator();  // compiler error
   }
}

但是Java编译器抱怨返回而不是.投射到也不起作用。Iterator<Object>Iterator<Foo>(Iterator<Foo>)


答案 1

您可以通过以下语法获取 Foo 类型的空列表:

return Collections.<Foo>emptyList().iterator();

答案 2

Java 7 已经问世很长一段时间了。除非您正在为以前的Java版本进行开发,否则您将返回一个空迭代器,如下所示:

return Collections.emptyIterator();