我正在尝试使用字符串来调用方法?
假设我有一个名为Kyle
的类,它有3个方法:
public void Test();
public void Ronaldo();
public void MakeThis();
我有一个字符串,其中包含我需要调用的方法的名称:
String text = "Test()";
现在我需要调用名称在此字符串中的方法:
Kyle k = new Kyle();
k.text;
?
答案 0 :(得分:4)
您需要使用java Reflection
来执行此操作。
使用您的具体示例:
String text = "Test";
Kyle k = new Kyle();
Class clas = k.getClass();
// you'll need to handle exceptions from these methods, or throw them:
Method method = clas.getMethod(text, null);
method.invoke(k, null);
没有getMethod()
和Method.invoke()
所需的异常处理,只涉及调用不带参数的方法。
另见:
答案 1 :(得分:3)
反射是Java中一个有趣的特性。它允许基本的内省。这里使用k.getClass().getMethod()
例如
String text = "Test";
Kyle k = new Kyle();
Method testMethod = k.getClass().getMethod(text, new Class<?>[] {
/*List parameter classes here eg. String.class , Kyle.class or leave empty for none*/}
Object returnedValue = testMethod.invoke(k, new Object[] {
/* Parameters go here or empty for none*/});
答案 2 :(得分:0)
您需要使用名为Reflection的内容。
答案 3 :(得分:0)
尝试反思。
import java.lang.reflect.Method;
class Kyle {
public void Test(){System.out.println("invoking Test()");}
public void Ronaldo(){System.out.println("invoking Ronaldo()");}
public void MakeThis(){System.out.println("invoking MakeThis()");}
public static void main(String[] args) throws Exception{
Kyle k=new Kyle();
String text = "Test";
Class c=k.getClass();
Method m=c.getDeclaredMethod(text);
m.invoke(k);
}
}
输出
invoking Test()