2016-08-26 32 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

相关问题