Практическое использование @Ignore в Realm?
Я пытался добавить Realm в свое приложение для Android. Их документы довольно хорошо объяснены и легко следовать. Но это не объясняет одну конкретную область. Я не могу понять практическое использование для @Ignore
Примечание. Я знаю, что поля под этой аннотацией не сохраняются.
может кто-то, пожалуйста, поделитесь несколько случаев использования. Кроме того, я хотел бы знать масштабы таких областей. Я имею в виду, если я поставил @Ignore
поле для некоторого значения, будет ли это значение доступно для другие классы в моем приложении для этого конкретного сеанса запуска. Если да, то как нам получить к нему доступ? Если нет (что, я думаю, так и есть), то зачем нам вообще такое поле?
Я искал здесь и на интернете, но не смог найти соответствующую информацию. Если из-за моего невежества я упустил какой-то ресурс, пожалуйста, направьте меня к нему.
спасибо.
4 ответов
соответственно официальной документации (см. https://realm.io/docs/java/latest/) @Ignore полезно в двух случаях:
когда вы используете интеграцию GSON, и ваш JSON содержит больше данных, чем вы хотите сохранить, но вы все равно хотели бы разобрать его и использовать сразу после.
-
вы не можете создавать пользовательские геттеры и сеттеры в классах, расширяющих 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 означает, что поле не должно сохраняться на диске. Игнорируемые поля полезны, если входные данные содержат больше полей, чем модель, и вы не хотите иметь много особых случаев для обработки этих неиспользуемых полей данных.