gpt4 book ai didi

Java泛型和继承: am I trying to be too clever?

转载 作者:行者123 更新时间:2023-12-01 23:25:55 25 4
gpt4 key购买 nike

我可能是个白痴,但我还没能弄清楚这个问题。我正在尝试使用数据库为简单的 CRUD 框架设置一些类。

我从 Entity开始 界面和 Users implements Entity 类。

然后作为“dao”类,我有一个接口(interface)

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中的方法被调用,神奇发生了,我得到了 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不可以吗?

最佳答案

你可以试试这个

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() );
}

关于Java泛型和继承: am I trying to be too clever?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19990887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com