是否可以在 Room Dao 中向上转换?
Is it possible to upcast in Room Dao?
这里有一个简单的例子来解释这个问题。
public interface User {
long getId();
}
@Entity
public class UserImpl implements User {
@PrimaryKey(autoGenerate = true)
private final long id;
public UserImpl(long id) {
this.id = id;
}
@Override
public long getId() {
return id;
}
}
@Dao
public interface UserImplDao {
@Query("SELECT * FROM UserImpl")
List<UserImpl> getAll();
}
@Database(entities = UserImpl.class, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserImplDao userImplDao();
}
是否可以让 UserImplDao return List<User>
而不是 List<UserImpl>
?
看起来应该很简单,但是如果我将 return 类型更改为 List<User>
.
,它不会编译
error: Not sure how to convert a Cursor to this method's return type
我 运行 遇到了同样的问题,并试图了解它是否受支持。
不幸的是,您似乎不能拥有一个 Dao
return 超类型,而是让它构造子类型。
在我的研究中,我发现了一个请求能够执行此操作的未决问题:https://issuetracker.google.com/issues/78317963
这里有一个简单的例子来解释这个问题。
public interface User {
long getId();
}
@Entity
public class UserImpl implements User {
@PrimaryKey(autoGenerate = true)
private final long id;
public UserImpl(long id) {
this.id = id;
}
@Override
public long getId() {
return id;
}
}
@Dao
public interface UserImplDao {
@Query("SELECT * FROM UserImpl")
List<UserImpl> getAll();
}
@Database(entities = UserImpl.class, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserImplDao userImplDao();
}
是否可以让 UserImplDao return List<User>
而不是 List<UserImpl>
?
看起来应该很简单,但是如果我将 return 类型更改为 List<User>
.
error: Not sure how to convert a Cursor to this method's return type
我 运行 遇到了同样的问题,并试图了解它是否受支持。
不幸的是,您似乎不能拥有一个 Dao
return 超类型,而是让它构造子类型。
在我的研究中,我发现了一个请求能够执行此操作的未决问题:https://issuetracker.google.com/issues/78317963