我正在尝试使用泛型修改我的代码,以避免所有重复的代码。我有一个类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子类?诀窍是什么??谢谢。编辑:为了更详细地说明我的目标:我有两个扩展DBBaseClass的类SUbClassA和SubClassB。我要一个方法:SubClassA.getAll()返回SUbClassA对象的数组列表。SubClassB.getAll()返回SUbClassB对象的数组列表。首先,我在所有子类中都创建了getAll ...因此,我现在尝试将此getAll()放入DBBaseclass中。如果我希望他们返回List,这很容易做到,但是我不知道如何告诉方法“向我返回这种特定子类的列表”。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您只能实例化一个具体的类,而不能实例化T,因为它只是一种类型,而不能实例化DBBaseClass,因为它是抽象类。你能做什么:定义扩展DBBaseClass的具体类,例如SubDBBaseClass为每个返回具体实例的子类创建一个工厂方法,例如protected T create() { return new SubDBBaseClass();}在您的DBBaseClass.getAll()方法中调用此方法,例如T myTObject = create();也许您不知道,但您使用的是起伏不定的active record pattern。我不喜欢这种模式,我会重新设计架构。但是,这只是我的5美分。 (adsbygoogle = window.adsbygoogle || []).push({});
09-10 14:04