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

How to use entity class which extends another class in a Room?

我尝试搜索所有内容,但没有找到任何解决方案。有一个问题类似,但没有人正确回答。转到这个问题,我有一个 class,它有房间实体注释,并且相同的 class 扩展了另一个 class(即图书馆 class)。现在,当我 运行 项目时,我得到一个错误,如 Error:Cannot find getter for field. Library's super class making issue here as it works当我删除它时。请告诉我如何让 subclass 作为扩展 super class 的实体工作。谢谢你的时间。

    @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;
    }

}

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

看起来 Android Studio 从 mDay 生成的方法名称并不是 Room 正在寻找的方法名称。

由于您可以在父项中使用不同的字段名称 class,这看起来是最佳解决方案。

如果不能换库,尤其是不能用Ignore标记库class中的字段,所以不能通过插入中间件来解决问题class进入继承层次。 (我尝试使用 EventDetails 的构造函数并将私有字段作为参数,但这也不起作用)

所以在这种情况下,我认为您最好的选择是不要尝试从库 class 进行扩展(但也许从某些 "surrogate parent" class)进行扩展并弥合差距在一些工厂 class 的帮助下到图书馆 class。