我可能是个白痴,但我一直无法弄清楚这一点。我正在尝试为带有数据库的简单 CRUD 框架设置一些类。
我从一个Entity
接口和一个Users implements Entity
类开始。
然后作为“dao”类,我有一个接口
GenericTableModel<T extends Entity>
使用通常的功能,然后是抽象类
AbstractTableModel<T extends Entity> implements GenericTableModel<T>
它实现了常见的功能,例如List<T> listAll()
, 最后是
UsersTable extends AbstractTableModel<Users> implements GenericTableModel<Users>
这些是构造函数
AbstractTableModel( Class<T> classType ){ this.type = classType; } and
UsersTable() { super( Users.class ); }
所以下面的代码按预期工作:listAll()
方法 inAsbtractTableModel
被调用,魔法发生,我得到一个Users
对象列表。
UsersTable ut = new UsersTable();
List<Users> usrLst = ut.listAll();
但是,当我添加以下类时,情况会发生变化:
public abstract class AbstractCrud<T extends GenericTableModel> {
private T table;
public AbstractCrud( T t ){ this.table = t }
public List<? extends Entity> getList(){
return this.table.listAll()
}
和
public class UserSimpleCrud extends AbstractCrud {
public UserSimpleCrud()
{
super( new UsersTable() );
}
super.getList()
不返回一个列表Users
,只是一个List
对象。为了获得Users
我需要以下方法的列表UserSimpleCrud
@Override
public List<Users> getList(){
return super.getList();
}
这将自动将对象列表转换为Users
.
Sooo....我在这里想念什么?很明显,除了几个灰色的细胞!;-)
为什么listAll()
方法 inAsbtractTableModel
能够将列表转换为Users
但getList()
inAbstractCrud
不能?