我可能是个白痴,但我无法想出这个。我正在尝试为一个带有DB的简单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()
中的AsbtractTableModel
方法,发生 magic ,并获得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()
中的AsbtractTableModel
方法能够将列表转换为Users
,但getList()
中的AbstractCrud
无法进行?{/ p>
答案 0 :(得分:3)
你可以试试这个
public abstract class AbstractCrud<T extends Entity> {
private GenericTableModel<T> table;
public AbstractCrud( GenericTableModel<T> table ){ this.table = table }
public List<T> getList(){
return this.table.listAll()
}
public class UserSimpleCrud extends AbstractCrud<User> {
public UserSimpleCrud(){
super( new UsersTable() );
}
答案 1 :(得分:0)
如果我正在编写自己的而不是使用Spring Data(这对我来说很适合这些类型的情况),我会做类似的事情:
public abstract class AbstractCrud<T extends GenericTableModel, E extends Entity> {
private T table;
public AbstractCrud( T t ){ this.table = t }
public List<E> getList(){
return this.table.listAll()
}
}
从那里开始,
public class UserSimpleCrud extends AbstractCrud<GenericTableModel<User>, User> {
public UserSimpleCrud()
{
super( new UsersTable() );
}
}
应该能得到你想要的东西。这不是我的头脑,但我认为这对你有用。