首页 > 解决方案 > Room:使用将 ArrayList 扩展为实体的类

问题描述

我正在使用 Room Persistence Library 制作一个 Android 应用程序。我有一堂课是这样extends的:ArrayList

@Entity(tableName = "the_table_name")
public class MyDemoClass<E extends AnotherDemoClass> extends ArrayList<E> {

  @PrimaryKey
  @NonNull
  @ColumnInfo(name = "id")
  private String id;

  @ColumnInfo(name = "title")
  private String title;

  @ColumnInfo(name = "creationdate")
  private Date creationDate;

  // Other stuff
}

我正在尝试添加这个类,它只允许扩展 AnotherDemoClass的类在其中,作为 Room 的实体,但发生编译时错误,即:

error: cannot find symbol
        _result = new MyDemoClass<E>();
                                  ^
  symbol:   class E
  location: class MyDemoClassDao_Impl

我已经尝试了一个多小时来解决这个问题,但没有任何运气。

编辑: 这是我的Dao

@Dao
public interface MyDemoClassDao {

  @Insert(onConflict = OnConflictStrategy.REPLACE)
  void insert(MyDemoClass<AnotherDemoClass> myDemoClass);

}

如果您的回答对我有任何帮助,请务必与我分享!

标签: javaandroidinheritancearraylistandroid-room

解决方案


我想使用 MyDemoClass 作为播放列表。我会将歌曲添加到此播放列表并将其保存在数据库中

MyDemoClass将是一个普通的 Java 对象 (POJO),并且具有与播放列表的简单属性相对应的字段,例如用作String用户可以在播放列表列表中提供和查看的名称。MyDemoClass不会是 的子ArrayList

Song将是另一个 POJO,并具有与歌曲的简单属性相对应的字段,例如String其标题。

由于一个播放列表可以包含多首歌曲,并且一首歌曲可以出现在多个播放列表中,因此您需要创建一个表示该连接的实体,并将外键关系返回到播放列表和歌曲实体。

Room 文档中对外键关系的使用进行了简单介绍。它应该包含在任何花费大量时间在 Room 上的书中。例如,这是我关于 Room 中 M:N 关系一章的预览版(来自本书)。


推荐阅读