2016-10-24 10 views
0

Хотите добавить объект в Realm, но ссылка на объект создается из шаблона Builder. Realm запрашивает getter для атрибутов. Можно ли добавить объект в Realm без getter, но с классом Builder?Хотите добавить объект в Realm, но ссылка на объект создается из шаблона построителя

+0

Как строитель получает возможность добавлять геттеры в ваш класс? –

ответ

-1

Нет, realm использует прокси-метод для назначения полей объекта. Вы должны рассмотреть возможность использования объектов Data Access - абстрактный интерфейс вокруг вашей базы данных. Создайте модель данных, которая будет использоваться вашим приложением и другой моделью (возможно, с теми же полями), ТОЛЬКО используется Realm. Это будет больше кода, но при этом вы будете независимы от реализации базы данных. Объект модели должен быть создан Builder, а затем принят интерфейсом базы данных someDao. В реализации этого интерфейса вы преобразуете этот объект в объект Realm.

+0

Да, Realm использует прокси-методы для назначения полей объекта, но весь доступ к полю преобразуется в вызов метода прокси с помощью Realm-Transformer. – EpicPandaForce

0

Как и в случае с Eliminate @Boilerplate, вы можете создавать сборщики для своих объектов RealmObjects (обратите внимание, что поддержка AutoValue не включена, поскольку абстрактные классы не поддерживаются).

public class User extends RealmObject { 
    @PrimaryKey 
    String username; 

    String firstname; 

    String lastname; 

    int age; 

    public String getUsername() { 
     return username; 
    } 

    public String getFirstname() { 
     return firstname; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public int getAge() { 
     return age; 
    } 
} 

Вы можете создать строитель так:

public final class UserBuilder { 
    private String username; 
    private String firstName; 
    private String lastName; 
    private int age; 

    public UserBuilder() { 
    } 

    public UserBuilder username(String username) { 
     this.username = username; 
     return this; 
    } 

    public UserBuilder firstName(String firstName) { 
     this.firstName = firstName; 
     return this; 
    } 

    public UserBuilder lastName(String lastName) { 
     this.lastName = lastName; 
     return this; 
    } 

    public UserBuilder age(int age) { 
     this.age = age; 
     return this; 
    } 

    public User build() { 
     User user = new User(); 
     user.username = this.username; 
     user.firstName = this.firstName; 
     user.lastName = this.lastName; 
     user.age = this.age; 
     return user; 
    } 
} 

Это возможно, так 0.88.0 и выше, поскольку Realm-трансформер изменяет весь доступ к полевой метод прокси-вызовов.

Однако, с этой установкой, я не знаю, как вы бы надежно изменить управляемый RealmObject, так, чтобы сохранить отношения, важно использовать тот же управляемый объект (используйте findFirst() и затем сеттер) - с учетом неуправляемого объект считается «новым» объектом, и сохранение его по сравнению с предыдущим объектом с тем же самым первичным ключом делает недействительными ссылки на объект.

 Смежные вопросы

  • Нет связанных вопросов^_^