2012-12-16 48 views
0

我有一个超类DBAdapter,它有方法fetchAll()它选择所有记录从DB的表到List<DBObject>。我继承了CategoryDBAdapter这个类,这个类知道从DBObject延伸的类Category列表<DBObject>转换到列表<Category>

当我打电话:

CategoryDBAdapter categoryDbAdapter = new CategoryDBAdapter(dbHelper); 

List<Category> categories = categoryDbAdapter.fetchAll(); 

我的代码无法施展List<DBObject>List<Category>。什么是解决这一冲突的常用方法?

+1

Java中的泛型只是幻想的突触糖,它使得它不必像恐龙在地球上漫游时那样从'Object'投射/从'Object'投射,并在编译时给你一些类型检查。你不能将泛型转换为另一个泛型。您需要重新设计类或创建新的Generic集合并复制/转换每个对象。 –

回答

2

你可以改变你将对DBAdapter和DBCategoryAdapter类使用泛型:

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

class DBCategoryAdapter extends DBAdapter<Category> { 

} 

您还需要在使用fetchall()方法的内容相适应,多么容易,这是取决于具体的实现。

0

我不认为有任何直接的办法。您需要为Category元素(List<Category> categoryList)创建一个新列表,迭代返回列表DBObject元素(List<DBObject> dbOjectsList),投射元素(Category category = (Category) dbObject;)并添加到新类别元素列表(categoryList.add(category);)。

+0

谢谢,我知道这种方式,但我希望存在一些通用和更高效的方法。或不? –

+0

@DmytroZarezenko:我不认为这种方法存在。 –

相关问题