2016-08-26 10 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オブジェクトにクエリ演算子の出力を再割り当てすることが本当に必要ですか?この他のスニペットでも同じ結果が得られますか? (ヒント:私は.equalTo().or()への呼び出しの前にquery =を削除した)

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

は、クエリは、本質的にビルダーのように機能するので、現実には、返されたビルダーは、その状態が与えられた条件を設定しています。これは、割り当てがオプションであることを意味します。

作業下記1の構造のようなクエリ理由です:

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

返されるパラメータがthisではなく、新たなRealmQueryです。

+0

ありがとうございました。以前の回答にコメントを追加しましたが、それは消えました。 私は 'equalTo()'の実装を見て、 'return this'で終わります。私はそれが呼び出された同じRealmQueryオブジェクトの状態を(副作用を介して)変更する必要があると思いました。これが本当であれば、再割り当ては不要であることを忘れないでください。 –

+0

あなたは正しいです、再割り当ては必要ありません。わかりやすくするためにそこにあるのです。 – EpicPandaForce

+0

私はこの質問を一度持ち、ソースを読んだので、それは本当です:) – EpicPandaForce

関連する問題