gpt4 book ai didi

java - 关闭 java.util.Iterator

转载 作者:IT老高 更新时间:2023-10-28 21:00:36 26 4
gpt4 key购买 nike

我使用一个资源实现了一个自定义 java.util.Iterator,该资源应该在最后使用 close() 方法释放。该资源可以是 java.sql.ResultSetjava.io.InputStream 等...

public interface CloseableIterator<T> extends Iterator<T>
{
public void close();
}

一些使用这个迭代器的外部库可能不知道它必须被关闭。例如:

public boolean isEmpty(Iterable<T> myiterable)
{
return myiterable.iterator().hasNext();
}

那么,有没有办法关闭这个迭代器?

更新:非常感谢当前的答案。我会给每个人一个(+1)。当 hasNext() 返回 false 时,我确实已经关闭了迭代器。我的问题是当循环迭代中断 before 最后一次迭代时,如我的示例所示。

最佳答案

创建一个实现 AutoCloseable interface 的自定义迭代器

public interface CloseableIterator<T> extends Iterator<T>, AutoCloseable {
}

然后在 try with resource statement 中使用这个迭代器.

try(CloseableIterator iterator = dao.findAll()) {
while(iterator.hasNext()){
process(iterator.next());
}
}

无论发生什么,这种模式都会关闭底层资源:- 声明完成后- 即使抛出异常

最后,清楚地记录必须如何使用这个迭代器。

如果您不想委托(delegate)关闭电话,请使用推送策略。例如。使用 java 8 lambda:

dao.findAll(r -> process(r));

关于java - 关闭 java.util.Iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3257972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com