2016-08-26 35 views
2

我經常看到的代碼片段是這樣的:RealmQuery:我是否需要每次將查詢運算符的結果重新分配給查詢對象?

public RealmResults<MyObject> getMyObjects(List<Integer> ids) { 
    Realm realm = null; 
    try { 
     realm = Realm.getDefaultInstance(); 
     RealmQuery<MyObject> query = realm.where(MyObject.class); 
     for (int i=0; i< ids.size(); i++) { 
      query = query.equalTo("id", ids.get(i)); 
      if (i != ids.size() -1) { 
       query = query.or(); 
      } 
     } 
     return query.findAll(); 
    } finally { 
     if (realm != null) realm.close(); 
    } 
} 

真的有必要重新指定查詢操作的輸出到RealmQuery對象?這個其他片段是否會達到相同的結果? (提示:我已刪除query =調用之前.equalTo().or()

public RealmResults<MyObject> getMyObjects(List<Integer> ids) { 
    Realm realm = null; 
    try { 
     realm = Realm.getDefaultInstance(); 
     RealmQuery<MyObject> query = realm.where(MyObject.class); 
     for (int i=0; i< ids.size(); i++) { 
      query.equalTo("id", ids.get(i)); 
      if (i != ids.size() -1) { 
       query.or(); 
      } 
     } 
     return query.findAll(); 
    } finally { 
     if (realm != null) realm.close(); 
    } 
} 

回答

2

查詢基本的功能就像一個建設者,因此在現實中,返回的建設者有其狀態給定條件設定。這意味着分配是可選的。

這就是爲什麼查詢,如下面的工作之一的結構:

query.equalTo(...).equalTo(...).beginGroup()....endGroup().findAll() 

返回的參數是this,而不是一個新的RealmQuery。

+0

謝謝我在之前的回答中加入了一條評論,但是它已經消失了。 我查看了'equalTo()'的實現,並以'return this'結尾:我認爲它必須修改它被調用到的(通過副作用)相同的RealmQuery對象的狀態。如果這是真的,那麼可以確定不需要重新分配嗎? –

+0

你是對的,重新分配是不需要的。這只是爲了清晰我認爲。 – EpicPandaForce

+0

我有這個問題一次,通讀源代碼,所以它是真的:) – EpicPandaForce

相關問題