我想为数据库访问创建一个名为DataModel的超类。我还有一个带有泛型方法的SQLiteOpenHelper。我的问题是转换父类的结果类型。我将用通用代码解释。在父类中使用all()方法:
public class DataModel {
public static ArrayList<DataModel> all(){
ArrayList<DataModel> datos = new ArrayList<DataModel>();
Map<String, String> columns = DataModel.getColumns();
Map<String, Object> columnData = LocalStorageServices.DatabaseService().getAllMatchesFromTable(DataModel.getTableName(), columns);
for (Map.Entry<String, Object> entry : columnData.entrySet()) {
DataModel auxM = new DataModel(columns);
}
return datos;
}
}
我还有一个扩展课程:
public class User extends DataModel {
protected String table = "testing";
}
我需要实现什么?获取子实例列表,以获得子数据和具体方法。我的意思是,我想调用ArrayList<User> appUsers = User.all();
,但我不能,因为DataModel.all()返回一个DataModel ArrayList(目前我必须做ArrayList<DataModel> appUsers = User.all();
)。
这里的问题是在不知道具体孩子的情况下转换孩子的拼写错误。明天我可以创建一个新的Entry类,Post类或我想要创建的任何模型。
答案 0 :(得分:1)
你可以把它变成通用的,例如。
public class DataModel<T> {
public ArrayList<T> all(){
// do generic stuff
return datos;
}
}
它必须是静态的吗?如果是,那么您需要使用
public static <T> ArrayList<T> all() { ... }
这样您的User
课程就像这样
public class User extends DataModel<User> {...}
现在可以使用
了ArrayList<User> appUsers = User.all();