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