我有一个像这样的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);
}