2014-04-30 142 views
1

想象一下,我有String X。我怎么能在java中调用方法X()?一个示例实现(这不是我的应用程序,因为这个问题更具理论性,并且没有特定的应用程序):基于字符串的调用方法

我有一个控制台线程序。扫描仪对象正在用于输入。我们的程序中有1000多种方法,我们需要控制台中的用户能够通过名称执行这些方法。例如(psuedocode),

public static void main(String[] args) { 
    // string X is prompted to be either doBlah, getBlah, etc... 
    String X = keyScanner.next(); 
    execute(X + "()"); //psuedocode for what I would like to do 
} 
public void doBlah() {} 
public void getBlah() {} 
public void letNooo() {} 
// etc... (just random method names, no particular pattern) 

我怎么能用Java或任何语言来做到这一点?谢谢。

+1

您正在寻找[反思API](http://docs.oracle.com/javase/tutorial/reflect/)。 –

+0

在Java中搜索“反射”,也用于“invoke()” – morgano

+0

您的方法是在您的类中声明的,还是其中一些是继承的?他们都是公开的吗?还有什么方法参数? – Pshemo

回答

1

你将不得不使用反射:

Method m = Main.class.getMethod("doBlah"); 
m.invoke(new Main(), null) 

你既可以用于检索方法和调用它,所有这些都可以发现here添加更多的其他参数。