我来自C#后台,迭代器实现IDisposable接口。 Java中是否有任何迭代器实现了类似的接口,使它们自动关闭?
答案 0 :(得分:7)
Java的迭代器只是迭代某些对象集合的抽象。如果底层数据结构在迭代后需要进行一些清理(例如关闭文件),那么你需要保留对该底层对象的引用,这样你就可以做任何必须做的事情来“处理”它。
答案 1 :(得分:4)
在Java 7中,您可以创建自己的迭代器(或者一个装饰器),这也恰好实现了AutoCloseable。然后,您可以在try块中使用它:
try ( Iterator<MyObject> it = new MyAutoCloseableIterator(list) ) {
while (it.hasNext()) {
MyObject obj = it.next();
}
}
在try块结束时,如果Iterator实现了AutoCloseable接口,那么&#34; .close()&#34;方法将自动调用它。
http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
但是我不相信任何内置的迭代器(通常是集合的内部类,因此不公开)都实现了这个接口。
另一种选择是(再次)编写自己的迭代器代码,并在&#34; .hasNext()&#34;方法返回false。
答案 2 :(得分:1)
在Java中,Iterator
本身就是一个接口。并且它没有任何close()
方法。
答案 3 :(得分:1)