我正在尝试使用泛型修改代码,以避免所有重复的代码。
我有一个类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,这很容易做到,但我不知道如何告诉方法“返回这种特定子类的列表”。
您只能实例化一个具体的类,但不能实例化T
,因为它只是一个类型,不能实例化DBBaseClass
,因为它是抽象的。
你能做什么:
>
DBBaseClass
的具体类,例如SubDBBaseClass
为每个返回具体实例的子类创建工厂方法,例如
protected T create() {
return new SubDBBaseClass();
}
在DBBaseClass中调用此方法。getAll()
方法,例如
T myTObject = create();
也许你不知道,但你使用的是有起有落的活动记录模式。我不喜欢这种模式,我会重新设计架构。但这些只是我的5美分。
您希望将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的子类。 问题答案: 编译器不允许您执行此操作,因为可能是其他一些类,例如。 您知道这是通过检查获得的,但是编译器却没有。