Java供应商/消费者/可运行?当方法作为字符串参数提供时,如何调用该方法

Java供应商/消费者/可运行?当方法作为字符串参数提供时,如何调用该方法,java,Java,我需要帮助。用户将参数作为字符串提供给方法。我的代码需要运行这个方法 我们如何使用供应商/消费者/Runnable实现这一目标。这可以使用反射来完成,但我想避免它 import java.util.Scanner; public class InvokeStringArgument{ public static Supplier<String> invokeMe(String returnStr){ return new Supplier<String

我需要帮助。用户将参数作为字符串提供给方法。我的代码需要运行这个方法

我们如何使用供应商/消费者/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")
    }
}
import java.util.Scanner;
公共类InvokeStringArgument{
公共静态供应商invokeMe(字符串returnStr){
退回新供应商(){
公共字符串get(){
System.out.println(“成功”);
返回返回str;
}
};
}
公共静态void main(字符串[]args){
//invokeMe(“MyValue”).get();
System.out.println(“请输入要调用的方法:”);
扫描仪sc=新的扫描仪(System.in);
String methodName=sc.next();
//需要一个当作为字符串传递时将运行该方法的代码
//例如,用户将其输入为invokeMe(“MyValue”)
}
}

好的,今天有时间调查这些悬而未决的事情。实现了符合我要求的解决方案。使用BeanShell和reflection完成此操作,如下所示

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){

        }
    }
}

您正在查找
invokeMe(methodName).get()
?或者你是想让用户名成为方法,而某个地方有某种方法?(这将需要反射,而且会很恶心。)我希望当
invokeMe(“MyValue”)
作为字符串从外部源提供时,它应该被调用并成功运行。应该调用什么?用户是否自己编写字符串
“invokeMe(\“MyValue\”)
?(这将非常困难;您必须自己分析输入。)是的,用户自己将字符串“invokeMe(\“MyValue\”)作为字符串参数写入其他方法。请仅在100%信任用户的情况下使用此解决方案,因为它允许运行任何代码,包括恶意代码。
Please enter string to evaluate:
invokeMe("MyValue").get();
Success: Received string 'MyValue'