Практическое использование @Ignore в Realm?

Я пытался добавить Realm в свое приложение для Android. Их документы довольно хорошо объяснены и легко следовать. Но это не объясняет одну конкретную область. Я не могу понять практическое использование для @Ignore Примечание. Я знаю, что поля под этой аннотацией не сохраняются.

может кто-то, пожалуйста, поделитесь несколько случаев использования. Кроме того, я хотел бы знать масштабы таких областей. Я имею в виду, если я поставил @Ignore поле для некоторого значения, будет ли это значение доступно для другие классы в моем приложении для этого конкретного сеанса запуска. Если да, то как нам получить к нему доступ? Если нет (что, я думаю, так и есть), то зачем нам вообще такое поле?

Я искал здесь и на интернете, но не смог найти соответствующую информацию. Если из-за моего невежества я упустил какой-то ресурс, пожалуйста, направьте меня к нему.

спасибо.

4 ответов


соответственно официальной документации (см. https://realm.io/docs/java/latest/) @Ignore полезно в двух случаях:

  1. когда вы используете интеграцию GSON, и ваш JSON содержит больше данных, чем вы хотите сохранить, но вы все равно хотели бы разобрать его и использовать сразу после.

  2. вы не можете создавать пользовательские геттеры и сеттеры в классах, расширяющих RealmObject, так как они будут переопределены. Но в случае вы хотите иметь некоторую пользовательскую логику в любом случае, игнорируемые поля могут использоваться как хак для этого, потому что Realm не переопределяет их getter & setters. Пример:

    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'
    }
    

игнорируемые поля доступны только из объекта, в котором они были установлены (так же, как с обычными объектами в Java).

обновление: как указал @the-null-Pointer в комментариях, второй пункт устарел. Реальность позволяет иметь настраиваемый геттеры и сеттеры в области модели.


вот несколько реальных случаев использования:

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;
}

я нашел полезным определить имена полей для того, когда я запрашиваю. Например

пользователей.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();

таким образом, если схема изменяется от say name to id мне не нужно выслеживать каждое вхождение "name".


пожалуйста, смотрите the официальная документация о @Ignore аннотация:

аннотации @Ignore означает, что поле не должно сохраняться на диске. Игнорируемые поля полезны, если входные данные содержат больше полей, чем модель, и вы не хотите иметь много особых случаев для обработки этих неиспользуемых полей данных.