我已经尝试使用变量来调用java方法,使用method.invoke()
,如Active Directory中所述。但似乎在method.invoke()
中应该有一个对象或某些东西作为参数。我尝试过使用null,但是没有调用该方法。我的代码如下:
String ACTION = "cart";
Method method = SolverService.class.getDeclaredMethod("Method" + ACTION);
method.invoke(null);
我有一个方法:
public void Methodcart(){
Toast.makeText(this,"Method called",Toast.LENGTH_LONG).show();
}
PS:我必须让method.invoke()
工作。否则,我需要编写一个很长的switch-case语句列表。我已经阅读了文档但是对于我可能需要在这里使用的对象实例了解不多,因为我是Android应用程序开发的新手。 / p>
答案 0 :(得分:0)
您可以尝试类似于下面显示的代码(Java反射) -
假设我有一个类ClassWithMethods.java,其中包含我想要在其他类中调用的方法,如下所示 -
public class ClassWithMethods {
private int counter;
public void printIt(){
System.out.println("printIt() no param");
}
public void printItString(String temp){
System.out.println("printIt() with param String : " + temp);
}
}
现在我还有另一个类TestApp.java,它将在运行时使用Java Reflection调用ClassWithMethods类的方法 -
public class TestApp {
public static void main(String[] args) {
//no paramater
Class noparams[] = {};
//String parameter
Class[] paramString = new Class[1];
paramString[0] = String.class;
//int parameter
Class[] paramInt = new Class[1];
paramInt[0] = Integer.TYPE;
try{
//load the ClassWithMethods at runtime
Class cls = Class.forName("com.myapps.ClassWithMethods");
Object obj = cls.newInstance();
//call the printIt method
Method method = cls.getDeclaredMethod("printIt", noparams);
method.invoke(obj, null);
//call the printItString method, pass a String param
method = cls.getDeclaredMethod("printItString", paramString);
method.invoke(obj, new String("someString"));
}catch(Exception ex){
ex.printStackTrace();
}
}
答案 1 :(得分:0)