Java 列表<;DBObject>;铸造到列表<;类别>;

Java 列表<;DBObject>;铸造到列表<;类别>;,java,Java,我有一个超级类DBAdapter,它有一个方法fetchAll(),它从数据库的表中选择所有记录到列表中。我用CategoryDBAdapter继承了这个类,这个类知道classCategory是从DBObject扩展而来的 当我打电话时: CategoryDBAdapter categoryDbAdapter = new CategoryDBAdapter(dbHelper); List<Category> categories = categoryDbAdapter.fetch

我有一个超级类
DBAdapter
,它有一个方法
fetchAll()
,它从数据库的表中选择所有记录到
列表中。我用
CategoryDBAdapter
继承了这个类,这个类知道class
Category
是从
DBObject
扩展而来的

当我打电话时:

CategoryDBAdapter categoryDbAdapter = new CategoryDBAdapter(dbHelper);

List<Category> categories = categoryDbAdapter.fetchAll();
CategoryDBAdapter CategoryDBAdapter=新的CategoryDBAdapter(dbHelper);
List categories=categoryDbAdapter.fetchAll();

我的代码无法将
列表
强制转换为
列表
。解决此冲突的常用方法是什么?

我认为没有任何直接的方法。您需要为
类别
元素创建一个新列表(
list categoryList
),迭代
DBObject
元素返回的列表(
list dbobjectslist
),强制转换元素(
Category Category=(Category)dbObject;
)并添加到新的类别元素列表中(
categoryList.add(Category);
)。

您可以将DBAdapter和DBCategoryAdapter类更改为使用泛型:

class DBAdapter<T extends DBObject> {
    List<T> fetchAll() {
        ...
    }
}

class DBCategoryAdapter extends DBAdapter<Category> {

}
类DBAdapter{
列表fetchAll(){
...
}
}
类DBCategoryAdapter扩展了DBAdapter{
}

您还需要调整fetchAll()的内容方法,这有多容易取决于您的实现。

谢谢,我知道这种方法,但我希望有一些通用的、更有效的方法存在。或者没有?@DmytroZarezenko:我认为不存在这样的方法。Java中的泛型只是一种奇特的突触糖,它使您不必像恐龙时代那样向对象转换它在地球上漫游,并在编译时为您提供一些类型检查。您不能将一个泛型强制转换为另一个泛型。您需要重新设计类或创建新的泛型集合并复制/强制转换每个对象。