如何使用实体类扩展房间中的另一个类?

时间:2018-11-08 17:51:28

标签: java android inheritance android-room

我尝试搜索所有内容,但未找到任何解决方案。一个问题类似,但没有人正确回答。转到问题,我有一个具有房间实体注释的类,并且同一类扩展了另一个类(即Library类)。现在,当我运行项目时,出现类似错误:找不到字段的吸气剂这样的错误。请告诉我我该如何扩展子类作为扩展超类的实体的空间。谢谢您的宝贵时间。

    @Entity(tableName = "event")
public class EventDetails extends ParentEntity implements Parcelable{

    @PrimaryKey(autoGenerate = true)
    int id;

    String name;
    Calendar startDay = Calendar.getInstance();
    Calendar endDay = Calendar.getInstance();

public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Calendar getStartDay() {
        return startDay;
    }

    public void setStartDay(Calendar startDay) {
        this.startDay = startDay;
    }

    public Calendar getEndDay() {
        return endDay;
    }

    public void setEndDay(Calendar endDay) {
        this.endDay = endDay;
    }

public void setName(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }
}



public class ParentEntity {
    private Calendar mDay;


    public Calendar getmDay() {
        return mDay;
    }

    public void setmDay(Calendar mDay) {
        this.mDay = mDay;
    }

}

1 个答案:

答案 0 :(得分:1)

这似乎主要是一个命名问题:将字段名称从 mDay 更改为 day ,并相应地重命名setter / getter之后,一切都会编译。

似乎Android Studio从 mDay 生成的方法名称不是Room正在寻找的方法名称。

由于您可以在父类中使用不同的字段名称,因此这似乎是最佳解决方案。

如果无法更改库,则特别不可能用Ignore标记库类中的字段,因此无法通过在继承层次结构中插入中间类来解决此问题。 (我尝试使用EventDetails的构造函数,并以私有字段作为参数,但这也不起作用)

因此,在这种情况下,我认为您最好的选择是不要尝试从库类扩展(但可能从某些“代理父代”类扩展),并在某些工厂类的帮助下缩小与库类的差距