3

我正在尝试使用字符串来调用方法?

假设我有一个名为的类Kyle,它有 3 个方法:

public void Test();
public void Ronaldo();
public void MakeThis();

我有一个字符串,其中包含我需要调用的方法的名称:

String text = "Test()";

现在我需要调用名称在此字符串中的方法:

Kyle k = new Kyle();

k.text;?

4

4 回答 4

5

您需要使用 javaReflection来执行此操作。

请参阅:Class.getMethod()

使用您的具体示例:

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()这没有and所需的异常处理Method.invoke(),并且仅涵盖调用不带参数的方法的情况。

也可以看看:

于 2012-06-19T19:43:50.860 回答
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*/});
于 2012-06-19T19:51:48.957 回答
0

你需要使用一种叫做Reflection的东西。

于 2012-06-19T19:43:20.283 回答
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()

于 2012-06-19T19:49:14.057 回答