在领域中实际使用@Ignore?

时间:2015-11-29 10:50:41

标签: android realm

我一直试图在我的Android应用中添加Realm。他们的文档很好地解释了&容易遵循。但它无法解释这个特定领域。我无法弄清楚public Person(string FirstName, string LastName, string Profession) { _firstName = FirstName; _lastName = LastName; _profession = Profession; } private string _firstName; public string FirstName { get { return this._firstName; } set { this._firstName = value; RaisePropertyChanged("FirstName"); } } private string _lastName; public string LastName { get { return _lastName; } set { _lastName = value; RaisePropertyChanged("LastName"); } } private string _profession; public string Profession { get { return _profession; } set { _profession = value; RaisePropertyChanged("Profession"); } } 注释的实际用途。我知道这个注释下的字段不会被保留。

有人可以分享一些用例。我也想知道这些领域的范围。我的意思是,如果我将@Ignore字段设置为某个值,那么该值可用于我的应用中针对该特定启动会话的其他类。如果是,那么我们如何访问它?如果没有(我猜是这样),那么为什么我们还需要这样一个领域呢?

我在这里和网上搜索过但无法找到相关信息。如果出于我的无知,我错过了一些资源,请指导我。

感谢。

4 个答案:

答案 0 :(得分:10)

根据官方文档(参见https://realm.io/docs/java/latest/ @Ignore 在两种情况下有用:

  1. 当您使用GSON集成时,您的JSON包含的数据超出了您想要存储的数据,但您仍然想要解析它,并在之后立即使用。

  2. 您无法在扩展RealmObject的类中创建自定义getter和setter,因为它们将被覆盖。但是如果你想要一些自定义逻辑,被忽略的字段可以用作黑客来做到这一点,因为Realm不会覆盖他们的getter& setter方法。例如:

    package io.realm.entities;
    
    import io.realm.RealmObject;
    import io.realm.annotations.Ignore;
    
    public class StringOnly extends RealmObject {
    
        private String name;
    
        @Ignore
        private String kingName;
    
        // custom setter
        public void setKingName(String kingName) { setName("King " + kingName); }
    
        // custom getter
        public String getKingName() { return getName(); }
    
        // setter and getter for 'name'
    }
    
  3. 忽略的字段只能从它们设置的对象访问(与Java中的常规对象相同)。

    UPDATE:由于@ The-null-Pointer-在评论中指出,第二点已过时。 Realm现在允许在Realm模型中使用自定义getter和setter。

答案 1 :(得分:3)

以下是几个真实用例:

1 - 获取用户的全名:

public class User extends RealmObject {

private String first;
private String last;

@Ignore
private String fullName;

public String getFullName() {
    return getFirst() + " " + getLast();
}

获取对象的JSON表示:

public class User extends RealmObject {

private String first;
private String last;

@Ignore
private JSONObject Json;

public JSONObject getJson() {
     try {
        JSONObject dict = new JSONObject();

        dict.put("first", getFirst());
        dict.put("last", getLast());
        return dict;
    } catch (JSONException e) {
        // log the exception
    }

    return null;
}

答案 2 :(得分:1)

我发现在查询时定义字段名称很有用。例如

<强> User.java

public class User extends RealmObject {
    @Index
    public String name;

    @Ignore
    public static final String NAME = "name";
}

然后我可以做类似的事情:

realm.where(User.class).equalTo(User.NAME, "John").findFirst();

这样一来,如果架构从name改为id,我就不必每次都追捕"name"

答案 3 :(得分:0)

请参阅关于 @Ignore 注释的official documentation

注释 @Ignore 表示不应将字段持久保存到磁盘。如果您的输入包含的字段多于模型,则忽略的字段很有用,并且您不希望有许多特殊情况来处理这些未使用的数据字段。