我有这样的模型类
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/