2017-09-20 116 views
4

我試圖將我們的項目中使用的房間,這,順便說一句,我認爲這是向前邁出的一步真棒。房間是否支持實體繼承?

我有以下結構:

public class Entity extends BaseObservable { 

    @PrimaryKey(autoGenerate = true) 
    @ColumnInfo(name = "_id", typeAffinity = ColumnInfo.INTEGER) 
    private long mId; 

    @ColumnInfo(name = "is_dirty") 
    @TypeConverters(BooleanTypeConverter.class) 
    private boolean mIsDirty; 

    // default constructor and accessors omitted for brevity 
} 

@Entity(tableName = "some_entities") 
public class SomeEntity extends Entity { 

    @ColumnInfo(name = "type", typeAffinity = ColumnInfo.TEXT)   
    private String mType; 

    @ColumnInfo(name = "timestamp", typeAffinity = ColumnInfo.INTEGER) 
    private long mTimestamp; 

    // constructor, accessors 
} 

當我嘗試編譯我的項目,它失敗,沒有特定的錯誤。

如果我嘗試了一臺實體層級編譯它,一切都很好。

所以,我的主要問題是: 房間是否支持實體繼承?它能夠從父類Entity類中獲得列定義嗎?

我也想知道,如果延長BaseObservable(我需要讓數據綁定工作)可能會導致問題房? BaseObservable有一個私有瞬態字段,所以這可能會導致代碼生成中的一些問題。

是否有任何推薦的模式來處理這個問題,還是我只需要拼合我的實體層次結構?

+0

因此,我做了一些更多的測試,結果如下:YES,Room確實支持繼承和YES,所以擴展'BaseObservable'是一個問題。我正在從實體層次結構中刪除'BaseObservable'。 –

回答

3

經過進一步調查事實證明,客房實體不應延長BaseObservable類。它包含無法用@Ignore標記的字段並破壞代碼生成。

間繼承效果很好。註釋按預期進行處理,DB操作正常運行。您可以從實體和POJO中擴展。