gpt4 book ai didi

java - java中是否有用于在 hibernate 中进行延迟获取的 yield 返回?

转载 作者:行者123 更新时间:2023-12-04 05:57:05 24 4
gpt4 key购买 nike

我知道 Java 中没有“ yield 返回”(C# 构造)。但是,当我在 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 .该技术将是相似的,但通常需要更多的工作(延迟加载的 List 可能需要一个延迟加载的迭代器,您可能不得不关注线程安全,只是想一些事情)。

这基本上是通过编译时转换手动完成 C# 的 yield 和 yield return 关键字在幕后所做的事情。

关于java - java中是否有用于在 hibernate 中进行延迟获取的 yield 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9394104/

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