java、generic和getAll

java、generic和getAll,java,generics,Java,Generics,我正在尝试使用泛型修改代码,以避免所有重复的代码 我有一个类DBBaseClass,它将被其他类扩展。我试图创建一个getAll方法,返回存储在数据库中的子类的所有对象 class abstract DBBaseClass { abstract readDataBase(int _id); public <T extends DBBaseClass> List<T> getAll() { List<T> array = new Arra

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

我有一个类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;
class抽象DBBaseClass{
抽象可读数据库(int_id);
公共列表getAll()
{
列表数组=新的ArrayList();
ArrayList myints=DBManager.request_database_for_id(getIdField(),getTableName());
T myTObject=new T();//不工作*************************

对于(int i=0;i您希望使DBBaseClass成为泛型的,对于它,声明如下:

abstract class DBBaseClass<T extends DBBaseClass<?>>

抽象类DBBaseClass您希望使DBBaseClass成为泛型类,为此,您可以这样声明:

abstract class DBBaseClass<T extends DBBaseClass<?>>

抽象类DBBaseClass您希望使DBBaseClass成为泛型类,为此,您可以这样声明:

abstract class DBBaseClass<T extends DBBaseClass<?>>

抽象类DBBaseClass您希望使DBBaseClass成为泛型类,为此,您可以这样声明:

abstract class DBBaseClass<T extends DBBaseClass<?>>

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

你能做什么:

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

    protected T create() {
        return new SubDBBaseClass();
    }
    
  • DBBaseClass.getAll()方法中调用此方法,例如

    T myTObject = create();
    

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

你只能实例化一个具体的类,但不能实例化
t
,因为它只是一个类型,而不是
DBBaseClass
,因为它是抽象的

你能做什么:

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

    protected T create() {
        return new SubDBBaseClass();
    }
    
  • DBBaseClass.getAll()方法中调用此方法,例如

    T myTObject = create();
    

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

你只能实例化一个具体的类,但不能实例化
t
,因为它只是一个类型,而不是
DBBaseClass
,因为它是抽象的

你能做什么:

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

    protected T create() {
        return new SubDBBaseClass();
    }
    
  • DBBaseClass.getAll()方法中调用此方法,例如

    T myTObject = create();
    

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

你只能实例化一个具体的类,但不能实例化
t
,因为它只是一个类型,而不是
DBBaseClass
,因为它是抽象的

你能做什么:

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

    protected T create() {
        return new SubDBBaseClass();
    }
    
  • DBBaseClass.getAll()方法中调用此方法,例如

    T myTObject = create();
    


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

查看此处了解有关泛型的更多信息:更新以启用泛型类型和固定抽象位置的扩展查看此处了解有关泛型的更多信息:更新ed启用泛型类型和固定抽象位置的扩展查看此处了解有关泛型的更多信息:更新以启用泛型类型和固定抽象位置的扩展查看此处了解有关泛型的更多信息:更新以启用泛型类型和固定抽象位置的扩展是否希望DBBase类包含inst它本身的实例?对我来说这看起来很奇怪。请解释一下,就好像我们是9岁的孩子一样,你想要实现什么。你想要DBBase类包含自身的实例吗?这对我来说很奇怪。请解释一下,就好像我们是9岁的孩子一样,你想要实现什么。你想要DBBase类包含它的实例吗self?这对我来说很奇怪。请解释一下,就好像我们是9岁的孩子一样,你想要实现什么。你想要DBBase类包含自身的实例吗?这对我来说很奇怪。请解释一下,就好像我们是9岁的孩子一样,你想要实现什么。谢谢,它正在工作。我实际上正在重新设计架构起初,当我开始我的项目时,我的OOP知识非常贫乏。因此,我很高兴能有一些关于如何重新设计架构的线索。我听说过工厂模式。不确定它在这里是否有效。请看一本优秀的书“企业应用程序架构的模式”Martin Fowler概述了服务体系结构。感谢它的工作。实际上,我正在重新设计体系结构,因为刚开始我的项目时,我的OOP知识非常贫乏。因此,我很高兴能有一些关于如何重新设计体系结构的线索。我听说过工厂模式。不确定它在这里是否有效。有没有看一看优秀的书籍《企业应用程序体系结构模式》Martin Fowler概述了服务体系结构。感谢它的工作。实际上,我正在重新设计体系结构,因为刚开始我的项目时,我的OOP知识非常贫乏。因此,我很高兴能有一些关于如何重新设计体系结构的线索。我听说过工厂模式。不确定它在这里是否有效。有没有看一本优秀的书《企业模式》