java - 使用静态函数遍历类

标签 java class interface

我有这样的模型类

class ModelName {
    public static void createTable(SQLiteDatabase db){
        // code to create Table in DB
    }

    public static void deleteTable(SQLiteDatabase db){
        // code to delete Table from DB
    }
}

每个类都有这些静态函数createTable, deleteTable
我想像这样遍历类:

SQLiteDatabase db_object = ....; //init the object
Class<?>[] models = {ModelName, OtherModelName};
for(Class<?> model : models){
    model.deleteTable(db_object);
}

但是为 public static void 定义接口(interface)是不可能的,我没有理由创建实例

如何实现?
找不到合适的词来描述我的想法

最佳答案

我不知道这是否是您要找的,但我只是通过以下方式对其进行了测试。

类:

class ModelName {
    public static void createTable(SQLiteDatabase db){
        System.out.println(Thread.currentThread().getStackTrace()[1]);
    }

    public static void deleteTable(SQLiteDatabase db){
        System.out.println(Thread.currentThread().getStackTrace()[1]);
    }
}

class OtherModelName {
    public static void createTable(SQLiteDatabase db){
        System.out.println(Thread.currentThread().getStackTrace()[1]);
    }

    public static void deleteTable(SQLiteDatabase db){
        System.out.println(Thread.currentThread().getStackTrace()[1]);
    }
}

主要代码:

Class<?>[] models = {ModelName.class, OtherModelName.class};

for(Class<?> model : models){
    Method method = model.getMethod("createTable", SQLiteDatabase.class);
    method.invoke(null, new SQLiteDatabase());
    method = model.getMethod("deleteTable", SQLiteDatabase.class);
    method.invoke(null, new SQLiteDatabase());
}

输出:

demo.reflection.ModelName.createTable(IterateClassStaticMethod.java:12)
demo.reflection.ModelName.deleteTable(IterateClassStaticMethod.java:16)
demo.reflection.OtherModelName.createTable(IterateClassStaticMethod.java:22)
demo.reflection.OtherModelName.deleteTable(IterateClassStaticMethod.java:26)

注意:对我来说,这看起来比创建实例的开销更大。此外,这样的代码看起来可读性和可管理性较差。

关于java - 使用静态函数遍历类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8329408/

相关文章:

java - 遍历文件数组

java - 我们可以在android中以编程方式找到视频的位深度吗

java - ARQoid SPARQL 查询中出现错误 java.lang.ExceptionInInitializerError

python - 如何在 Python 中使用 __init__ 方法?

java - Hibernate 子查询将 DetachedCriteria 应用到 ManyToMany 连接表

c++ - 模板类中的c++运算符重载Im正在尝试构建重载<<以打印树

Python 内置类型和用户定义类型之间的比较

c# - 通用类型的集合

使用Google Mock进行C++高性能单元测试?

c# - 显式标记派生类为基类的实现接口(interface)