我的项目包含此包:com.X.Y.Z.controller
此套餐包含3个文件
ControllerA.java
public class ControllerA {
public static void insert(Context context, ModelA model) {/*do somethings*/}
}
ControllerB.java
public class ControllerB {
public static void insert(Context context, ModelB model) {/*do somethings*/}
}
MainController.java
我使用以下代码从Controller A或B调用insert方法,这取决于某些条件
public static void insert(Context context, Object object) {
Class<?> clazz = Class.forName(mClass); //Controller A or B
Method method = clazz.getMethod("insert", ?);
method.invoke(null, ?);
}
我如何传递参数?对象可以是ModelA或ModelB
如果我的措辞不正确,我道歉
答案 0 :(得分:2)
您在方法查找和实例中将类作为varargs传递,对于静态调用和调用中的参数,该类为null:
boolean useA = true; // use A or B variant:
Method m = clazz.getMethod("insert", Context.class, useA ? ModelA.class : ModelB.class);
m.invoke(null, context, object)
答案 1 :(得分:0)
问题解决了:))
ModelA和ModelB实现相同的接口,例如Model(不重要),model.getClass()
是他的重要部分
public static void insert(Context context, Model model) {
Class<?> clazz = Class.forName(mClass); //Controller A or B
Method method = clazz.getMethod("insert", Context.class, model.getClass());
method.invoke(null, new Object[]{context, model}));
}
现在我可以用它:
Controller.insert(this, myModelA);
Controller.insert(this, myModelB);
全部谢谢。