据我所知,“ yield 返回”(C# 构造)在 Java 中不可用。但是,当我在 Java/Hibernate 中进行延迟加载时。使用延迟加载和类似于yield return 的方法来迭代集合的推荐方法是什么?
最佳答案
Java中没有yield return语句。做你想做的事情的最好方法(这并不是说一个 super 简单的方法)是编写你自己的 Iterator 的实现。 .
class LazyIterator implements Iterator<Foo> {
private Iterator<Foo> backingIterator = null; //set this later
private void lazyLoad() {
if (backingIterator != null) {
return;
}
//load the backing collection and assign to backingIterator here
}
@Override
public boolean hasNext() {
lazyLoad();
return backingIterator.hasNext();
}
@Override
public Foo next() {
lazyLoad();
return backingIterator.next();
}
@Override
public void remove() {
lazyLoad();
backingIterator.remove();
}
}
如您所见,这是一个全有或全无的惰性加载程序。您还可以考虑使用增量惰性加载程序,仅在您进行集合时加载数据。这很有用的一种情况是当集合包含大量记录时。
您可能还想要/需要更具体,并编写 Collection 的延迟加载包装器,或List 。该技术类似,但通常需要更多工作(延迟加载的列表可能需要延迟加载的迭代器,并且您可能必须考虑线程安全性,只需考虑一些事情)。
这基本上是手动执行 C# 的 Yield 和 Yield return 关键字在幕后通过编译时转换执行的操作。
关于java - java中是否有用于hibernate中延迟获取的yield return?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9394104/