Java 使用静态函数迭代类

Java 使用静态函数迭代类,java,class,interface,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 } } 每个类都有这些静态函数createTa

我有这样的模型课

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);
}
SQLiteDatabase db_object=//初始化对象
类[]模型={ModelName,OtherModelName};
对于(类模型:模型){
model.deleteTable(db_对象);
}

但是为
公共静态void
定义接口是不可能的,我没有理由创建实例

如何做到这一点?
真的找不到合适的词来描述我的想法

试试这个(未经测试):

for(类模型:模型){
getMethod(“deleteTable”,SQLiteDatabase.class).invoke(null,db_对象);
}

我不知道这是否是您正在寻找的,但我只是用以下内容对其进行了测试

课程:

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());
}
Class[]models={ModelName.Class,OtherModelName.Class};
对于(类模型:模型){
Method=model.getMethod(“createTable”,SQLiteDatabase.class);
invoke(null,新的SQLiteDatabase());
方法=model.getMethod(“deleteTable”,SQLiteDatabase.class);
invoke(null,新的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) 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)
注意:对我来说,这看起来比创建实例的开销更大。此外,代码的可读性和可管理性也不如此。

“我没有理由创建实例”-如果您想避免反射,这似乎是一个原因。我不想避免反射,只是忘记了它的存在:D 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)