【问题标题】:Is it necessary to extend every model class with RealmObject while working with realm?使用领域时是否有必要使用 RealmObject 扩展每个模型类?
【发布时间】:2016-07-19 06:28:42
【问题描述】:

我正在为我的应用程序使用 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

那么有必要用 RealmObject 扩展每个 Model 类吗?

【问题讨论】:

    标签: android realm


    【解决方案1】:

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

    docs 说:

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

    这意味着如果你不扩展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);
    

    【讨论】:

    • 顺便说一句,实现RealmModel并用@RealmClass注释类也可以
    • @beeender 很有趣,谢谢提及。这有记录吗?
    • 其实我们没有忘记记录 :) realm.io/docs/java/latest/#realmmodel-interface 它是几个月前添加的。
    • @beeender quiet :-) 以前没见过那部分。我加一下
    • @beeender 这部分文档 (realm.io/docs/java/latest/…) 没有提到您必须使用 @RealmClass 注释类。可能会很高兴添加它:-)
    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多