Java 列表<;DBObject>;铸造到列表<;类别>;
我有一个超级类Java 列表<;DBObject>;铸造到列表<;类别>;,java,Java,我有一个超级类DBAdapter,它有一个方法fetchAll(),它从数据库的表中选择所有记录到列表中。我用CategoryDBAdapter继承了这个类,这个类知道classCategory是从DBObject扩展而来的 当我打电话时: CategoryDBAdapter categoryDbAdapter = new CategoryDBAdapter(dbHelper); List<Category> categories = categoryDbAdapter.fetch
DBAdapter
,它有一个方法fetchAll()
,它从数据库的表中选择所有记录到列表中。我用CategoryDBAdapter
继承了这个类,这个类知道classCategory
是从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中的泛型只是一种奇特的突触糖,它使您不必像恐龙时代那样向对象转换它在地球上漫游,并在编译时为您提供一些类型检查。您不能将一个泛型强制转换为另一个泛型。您需要重新设计类或创建新的泛型集合并复制/强制转换每个对象。