1
我知道「yield return」(C#構造)在Java中不可用。但是,當我在Java/Hibernate中進行延遲加載時。推薦使用延遲加載和類似於yield return的方式來迭代集合的方式是什麼?在java中是否有一個在hibernate中獲取延遲獲取的yield yield?
我知道「yield return」(C#構造)在Java中不可用。但是,當我在Java/Hibernate中進行延遲加載時。推薦使用延遲加載和類似於yield return的方式來迭代集合的方式是什麼?在java中是否有一個在hibernate中獲取延遲獲取的yield yield?
Java中沒有yield return語句。最好的方式(這不是說一種超級簡單的方式)做你想做的就是編寫你自己的實現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可能需要一個懶惰的Iterator,並且您可能不得不關心線程安全性,只是想到幾件事情)。
這基本上是通過手工完成c#的yield和yield return關鍵字在編譯時轉換下做的。