我想创建一个名为 DataModel 的用于数据库访问的父类(super class)。我还有一个带有通用方法的 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 类或任何我想创建的模型。
最佳答案
你可以让它变得通用,例如
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();
关于java - 继承 - 从父类返回扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060651/