使用静态函数迭代类



我有一个像这样的Model类

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定义接口是不可能的,我没有理由创建实例

如何实现这一点?
我实在找不到合适的词来形容我的想法

我不知道这是否是你正在寻找的,但我只是用以下测试了它。

类:

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)之前

注意:对我来说,这看起来比创建实例的开销更大。而且,代码看起来可读性和可管理性都不如这样。

试试这个(未测试):

for(Class<?> model : models){
    model.getMethod("deleteTable",SQLiteDatabase.class).invoke(null,db_object);
}

最新更新