說,我想我的用戶鍵入命令轉換成字符串:如何將字符串中的文本用作方法?
String command = scan.nextLine();
他們鍵入類似object.function()
。我怎樣才能調用他們輸入的函數?
說,我想我的用戶鍵入命令轉換成字符串:如何將字符串中的文本用作方法?
String command = scan.nextLine();
他們鍵入類似object.function()
。我怎樣才能調用他們輸入的函數?
使用反射按名稱查找和調用特定對象上的方法。
這將幫助你:類似這樣的 http://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html
東西:
Class c = Class.forName("targetName");
Object o = c.newInstance();
OR
c = myExistingObj.getClass();
Method m = c.getDeclaredMethod("getSomething");
m.invoke(o, <params>);
如果else語句或(益)開關case語句我會使用的。由於編譯了java,所以不能只編寫代碼並讓java執行它。
例如:
Object duck = new Object();
String userInput = System.in.read();
if (userInput = "duck.quack();"){
//do something
duck.quack();
}
else if (userInput = "duck.fly();"){
//do something else
duck.fly();
}
//etc.
實際上並非如此,通過一些機制。 – 2012-02-13 01:34:13
@Muricula請參見['JavaCompiler'](http://docs.oracle.com/javase/7/docs/api/javax/tools/JavaCompiler.html)和['Runtime.exec'](http:// docs .oracle.com/javase/7/docs/api/java/lang/Runtime.html#exec(java.lang.String))/ ['URLClassLoader'](http://docs.oracle.com/javase/7 /docs/api/java/net/URLClassLoader.html)。 – Jeffrey 2012-02-13 01:34:50
@Muricula這不是真的,他不是在尋找一個shell執行程序或類加載器。您可以通過反射名稱來識別和調用方法。 – Timeout 2012-02-13 01:37:25
如果函數代碼中的某處,然後用這個:
ActivateUserDefAction.class.getMethod("method", null).invoke(this, null);
你可能想試試Janino as a script evaluator,它可以即時編譯,加載和運行Java代碼。
您是否希望它們能夠調用任意函數(就好像它們正在輸入已編譯和運行的代碼一樣),還是隻能從預先指定的列表中調用?如果後者, – Kitsune 2012-02-13 01:32:59
@Kitsune Code從一個預先指定的列表中,就像一個類的方法。 – VinylScratch 2012-02-13 01:34:35