2014-04-04 67 views
0

我想要一個文本字段並運行用戶輸入的任何內容。因此,如果用戶輸入 aPackage.AClass.aMethod(parms),它將在包,類和這些參數中運行該方法。這可能嗎? 我想這樣做的原因是,我可以調試我的代碼,並將程序放入「開發人員模式」並能夠執行任何命令。用戶輸入的Java運行方法

+0

通常,讓用戶訪問代碼是一種不好的做法。將文本解析爲字符串數組,然後使用if語句(或標記器)讀取參數並運行命令。 – Aarowaim

+0

是的,但並不是很平凡。可能有些圖書館可以提供幫助,但是如果不是的話,你可以解析它並使用反射API。無論如何,您可能會發現這種方式更合乎需要,因爲您可以將某些軟件包/方法/等列入黑名單,從而導致用戶造成惡作劇。 –

+0

已添加此問題的原因 –

回答

0

如果你知道類名,方法名,輸入參數類型,然後使用反射,這可以實現。這裏有一個相同的小代碼片段:

  //load the AppTest at runtime 
    Class cls = Class.forName("aPackage.AClass"); 
    Object obj = cls.newInstance(); 

    //call the printIt method 
    Method method = cls.getDeclaredMethod("aMethod", noparams); 
    method.invoke(obj, null); 
0

是的,這是可能的。使用Java Reflection API(tutorial on docs.oracle.com),您可以按名稱訪問類及其方法。如果您不知道參數的類型,則可能出現問題是重載方法。並且請注意,讓用戶執行隨機代碼是一個潛在的安全問題。