想要在Realm中添加对象,但是从构建器模式创建对象引用

时间:2016-10-24 08:00:53

标签: android realm builder android-database

想要在Realm中添加对象,但是从Builder模式创建对象引用。领域要求获取属性的getter。是否可以在没有getter的情况下在Realm中添加对象,但是使用Builder类?

2 个答案:

答案 0 :(得分: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-Transformer会更改对代理方法调用的所有字段访问权。

但是,使用此设置,我不确定如何可靠地修改托管的RealmObject,因为为了保留关系,使用同一个托管对象很重要(使用findFirst()然后设置者) - 考虑一个非托管对象被认为是一个新的"对象,并使用相同的主键将其保存在上一个对象上,使对象链接无效。

答案 1 :(得分:-1)

不,领域使用代理方法来分配对象字段。您应该考虑使用数据访问对象 - 数据库周围的抽象接口。创建数据模型,由您的应用程序和另一个模型(可能具有相同的字段)使用,仅供Realm使用。 这将是更多的代码,但通过这样做,您将独立于数据库实现。 模型对象应该由Builder创建,然后由someDao数据库接口接受。在该接口的实现中,您将此对象转换为Realm对象。