2017-04-09 6 views
0

私は助けが必要です。引数を文字列としてメソッドを提供するユーザー。私のコードはこのメソッドを実行する必要があります。Java Supplier/Consumer/Runnable?文字列引数として渡されたときにメソッドを呼び出す方法

サプライヤ/コンシューマ/ランナブルを使用してこれを達成する方法これは、反射を使用して行うことができますが、私はそれを避けたいです。

import java.util.Scanner; 

public class InvokeStringArgument{ 
    public static Supplier<String> invokeMe(String returnStr){ 
     return new Supplier<String>(){ 
      public String get(){ 
       System.out.println("Success"); 
       return returnStr; 
      } 
     }; 
    } 

    public static void main(String[] args){ 
     //invokeMe("MyValue").get(); 

     System.out.println("Please enter method to invoke:"); 
     Scanner sc = new Scanner(System.in); 
     String methodName = sc.next(); 
     //Need a code which will run the method when passed as a string 
     //For example user input it as invokeMe("MyValue") 
    } 
} 
+0

あなたは ')(' invokeMe(methodNameの)に.getをお探しですか?または、ユーザー_nameにmethod_を割り当てようとしていますか?どこかの方法がありますか? –

+0

'invokeMe(" MyValue ")'が外部ソースから文字列として提供されたときに呼び出され、正常に実行されるようにしたいと思います。 – NoviceUser

+0

_何が呼び出されるべきですか?ユーザ自身が文字列 '' invokeMe(\ "MyValue \") "'を書いていますか? –

答えて

0

[OK]をクリックして、これらの保留中のものを調べてください。この時点で私の要件を確認した達成されたソリューション。使用済みBeanShellのと

package beanshell; 

import java.util.Scanner; 
import java.util.function.Supplier; 

import bsh.EvalError; 
import bsh.Interpreter; 

public class InvokeStringArgument{ 
    public static Supplier<String> invokeMe(String returnStr){ 
     return new Supplier<String>(){ 
      public String get(){ 
       System.out.println("Success: Received string '"+returnStr+"'"); 
       return returnStr; 
      } 
     }; 
    } 

    public static void main(String[] args) throws EvalError { 
     //invokeMe("MyValue").get(); 

     System.out.println("Please enter string to evaluate:"); 
     Scanner sc = new Scanner(System.in); 
     String userInput = sc.next(); 

     Interpreter i = new Interpreter(); 

     Object evalSource = i.eval("public class EvalUserInput extends beanshell.InvokeStringArgument{" 
       + "public void evaluserInput(){" 
       + userInput+"" 
       + "}" 
       + "}"); 
     try{ 
      Class<?> noparams[] = {}; 
      Class<?> cls = (Class) evalSource; 
      Object obj = cls.newInstance(); 
      cls.getDeclaredMethod("evaluserInput", noparams).invoke(obj, null); 
     } catch(Exception e){ 

     } 
    } 
} 

以下のようにこれを成し遂げるために反射コンソールから:

Please enter string to evaluate: 
invokeMe("MyValue").get(); 
Success: Received string 'MyValue' 
関連する問題