我正在从SQL查询生成多种类型的报告(日,周,月)。报告具有相同的属性,但涵盖不同的时期,并且具有共同的标题结构。为了解决这个问题,我使用Report
作为抽象类来定义属性和必需的方法。
我的目标是以一种可以使用Report类从多态性中受益的方式构建我的代码。我希望能够将子类转换回原始超类,以便我的PagedListAdapter
可以处理多种类型的报告。我怎么能做到这一点?我一直在尝试使用通配符,但没有成功。
我替换LiveData
个实例的原因是为了确保只有一个LiveData
订阅了PagedListAdapter
。
ReportDao.java
@Dao
public abstract class ReportDao {
@Query(...)
abstract DataSource.Factory<Integer, Week> getWeekReports();
@Query(...)
abstract DataSource.Factory<Integer, Month> getMonthReports();
@Query(...)
abstract DataSource.Factory<Integer, Year> getYearReports();
}
ReportsViewModel
public class ReportsViewModel extends ViewModel {
private static final int TYPE_WEEK = 0;
private static final int TYPE_MONTH = 1;
private static final int TYPE_YEAR = 2;
private final ReportDao reportDao;
private LiveData<PagedList<Report>> reports;
public ReportsViewModel(ReportDao reportDao) {
this.reportDao = reportDao;
}
public LiveData<PagedList<Report>> getReports(int type) {
switch (type) {
case TYPE_WEEK:
reports = new LivePagedListBuilder<>(reportDao.getWeekReports(), 20)
.build(); // this wont compile
case TYPE_MONTH:
....
}
return reports;
}
}