在使用领域时是否有必要使用RealmObject扩展每个模型类?

时间:2016-07-19 06:28:43

标签: android realm

我正在为我的应用使用Realm ORM。我有3个模型类,其中两个扩展 RealmObject ,而另一个不扩展。

public class Party extends RealmObject implements Parcelable {
    @PrimaryKey
    public int id;
    public String name;
    public String name_en;
    public String name_ne;
    public String address;
    public String phoneNumber;
    public String taxRegistrationNumber;
    public String partyType;

第二类拥有Party类型的字段。但这并没有扩展RealmObject

public class CreatePurchaseOrder implements Parcelable {
    public int voucherNumber;
    public Date date;
    public Party party;
    String agent;

第三个类包含CreatePurchaseOrder的字段并扩展了RealmObject

[public class CreatePurchaseOrderRow extends RealmObject implements Parcelable {
    @PrimaryKey
    public int id;
    private int serialNumber;
    private String specification;
    private float quantity;
    private float rate;
    private String remarks;
    private boolean fulfilled;
    private CreatePurchaseOrder createPurchaseOrder;

使用此方法会生成错误消息 screenshot of error message

screenshot of error message

所以有必要使用RealmObject扩展每个Model类吗?

1 个答案:

答案 0 :(得分:7)

从技术上讲,您不必直接从模型类扩展RealmObject

docs说:

  

通过扩展RealmObject基类来创建Realm模型类。

这意味着如果你不扩展RealmObject,你的类不是Realm模型,因此它不能存储在领域中。

但是,您也可以实现RealmModel界面并使用@RealmClass

注释模型类
@RealmClass
public class MyModel implements RealmModel {

}

如上所述here

  

为什么模型类需要扩展RealmObject?

     

我们需要为您的模型类添加Realm特定功能。它还允许我们在API中使用泛型,使其更易于阅读和使用。 如果您不想扩展基类,则可以改为实现RealmModel接口。

here

  

扩展RealmObject基类的另一种方法是实现RealmModel接口并添加@RealmClass注释。

实现同一目标是一种不同的方式。您遇到的问题是相同的。您不能将普通对象存储在领域中。 必须使用上述两种方法之一将模型类连接到Realm。

请注意,如果您使用第二种方法,则用法不同:

// With RealmObject
myModel.isValid();

// With RealmModel
RealmObject.isValid(myModel);