在Java中,我需要从我的方法中返回一个Iterator。我的数据来自另一个对象,该对象通常可以给我一个迭代器,因此我可以返回它,但是在某些情况下,基础数据为null。为了保持一致,在这种情况下,我想返回一个“空”迭代器,这样我的调用者就不必测试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>)也不起作用。
Iterator<Object>
Iterator<Foo>
(Iterator<Foo>)
您可以通过以下语法获取Foo类型的空列表:
return Collections.<Foo>emptyList().iterator();