当前位置: 首页 > 知识库问答 >
问题:

Java,通用和getAll

叶越
2023-03-14

我正在尝试使用泛型修改代码,以避免所有重复的代码。

我有一个类DBBaseClass,它将被其他一些类扩展。我正在尝试创建一个getAll方法,该方法返回存储在数据库中的子类的所有对象。

 class abstract DBBaseClass {

  abstract readDataBase(int _id);

  public  <T extends DBBaseClass> List<T> getAll()
  {

 List<T> array = new ArrayList<T>();    

 ArrayList<Integer> myints = DBManager.request_database_for_ids(getIdField(), getTableName());

 T myTObject = new T();    // NOT WORKING  *************************

 for (int i=0;i<myints.size();i++) {        
        myTObject.read(myints.get(i));
        array.add(myTObject);
    }               

return array;

我有错误:-无法实例化类型T-类型T不是泛型;它不能用参数参数化

我如何在这里实例化我的T子类??

有什么诀窍??

谢谢

编辑:

为了更详细地解释我的目标:我有两个类SUbClassA和SubClassB,它们扩展了DBBaseClass。

我想要一个方法:子类。getAll()返回子类对象的arraylist。B类。getAll()返回子类对象的arraylist。

起初,我在我的所有子类中创建了getAll...所以,我现在尝试将这个getAll()放在DBBaseclass中。

如果我想让他们返回List,这很容易做到,但我不知道如何告诉方法“返回这种特定子类的列表”。

共有2个答案

聂鹏云
2023-03-14

您只能实例化一个具体的类,但不能实例化T,因为它只是一个类型,不能实例化DBBaseClass,因为它是抽象的。

你能做什么:

>

  • 定义扩展DBBaseClass的具体类,例如SubDBBaseClass
  • 为每个返回具体实例的子类创建工厂方法,例如

    protected T create() {
        return new SubDBBaseClass();
    }
    

    DBBaseClass中调用此方法。getAll()方法,例如

    T myTObject = create();
    

    也许你不知道,但你使用的是有起有落的活动记录模式。我不喜欢这种模式,我会重新设计架构。但这些只是我的5美分。

  • 孙熠彤
    2023-03-14

    您希望将DBBaseClass设置为泛型,为此,您可以这样声明:

    abstract class DBBaseClass<T extends DBBaseClass<?>>
    
     类似资料:
    • 问题内容: 在以下情况下,我遇到了仿制药的问题,请参见以下内联注释,以了解我的问题: 问题答案: //Intuitively I would expect this to mean that test is set containing objects //that subclass AbstractGroup Set<? extends AbstractGroup> test; 不,这意味着它是

    • 问题内容: 我想做一个通用的方法,使数字的总和。 我正在尝试的是: 但是问题是那个。 我怎样才能做到这一点? 谢谢 问题答案: 您可以通过多种方式将其结合在一起,但老实说,泛型根本不是走这条路。为每种具体的原始包装器类型构建一个方法,并分别实现它们。使其通用,将是一件令人头疼的事情。算术运算不能一般地发生。 通过使它通用也不会真正获得任何收益。如此简单且恒定的代码,您不必担心代码重复,因为它不会改

    • 问题内容: 我正在寻找为简单的无线HID接口设备编写Linux / Windows / Mac Java HID控制器。我已经修改了USB4Java LibUsb库,但无济于事,而且我朝着JavaHIDAPI的方向发展。 对我来说不幸的是,除了相当不错的高级编程技能集(C#/ VB.Net)之外,我真的不知道我在做什么,而切换到该选项会使我丧命。 的方向,我发现说,我首先需要编译HIDAPI库中找

    • 我希望有一个通用的框架来编写一些正则表达式中的语法验证规则,这样我就可以在前端和后端都使用它们。我使用javascript作为前端,使用java作为后端。我想在前端做一个表单提交,但是在提交表单之前,我需要执行一些语法规则检查。当请求到达后端时,我希望评估相同的规则集。 我想把这些规则放在一个可以加载javascript和java代码的公共位置,这样我只需要更改这个公共位置的规则,它们就会反映到两

    • 问题内容: 我正在尝试通过使用删除垃圾文件 只要我不使用通配符,它​​就可以正常工作,即,这有效: 而以下内容返回“没有此类文件或目录”: 我应该能够做到这里概述的所有美好的事情,对吗? 问题答案: 我可能建议您让Java为您执行此操作? 使用file.listFiles()获取文件列表 如果需要,使用file.getName()。contains(string)对其进行过滤 遍历执行file.d

    • 问题内容: 我正在尝试实现通用稀疏矩阵加法问题中提到的加法 我返回新Integer的行出现编译器错误。我不确定我缺少什么,因为T扩展了Number并且Integer是Number的子类。 问题答案: 编译器不允许您执行此操作,因为可能是其他一些类,例如。 您知道这是通过检查获得的,但是编译器却没有。