java - 继承 - 从父类返回扩展类

标签 java android

我想创建一个名为 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/

相关文章:

java - java中有没有一种方法可以绘制一个以双变量为中心的圆?

java - 如何在 ActiveMQ Artemis 集群中启用 REST

android - Android Studio中同步Gradle项目时发生错误

Android Google 登录 api 总是调用 onResume()

Java使用XOR加密文件

java - 需要帮助在 java 中循环我的 try 和 catch 语句

java - 订购 Java 方法的最常见方式是什么?

c# - 服务器应该如何向富客户端推送数据

iphone - 备份/恢复 Gmail?

java - Firebase 身份验证不成功