有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在beanshell中计算代码字符串并获取beanshell解释器返回的值

我与beanshell bsh-2.0b4合作。jar文件。我已经构建了path,并在java程序中使用了它。我已设法从控制台获取打印语句。但是如果返回值,如何获取返回值

    import java.io.*;
import bsh.Interpreter;
import bsh.EvalError;
public class CaptureDis {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Interpreter i = new Interpreter();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PrintStream ps2 = System.out;

        try {
            //i.eval(System.out.println("System.out.println(\"test\");"));
            i.eval("int x=2; int y=3; int res=x+y; return res");
            i.getOut();
        } catch (EvalError e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String out = baos.toString();
        System.setOut(ps2);
        System.out.println(out);
    }

}

共 (2) 个答案

  1. # 1 楼答案

    eval方法返回'res'。实际上,您也可以在脚本中省略return语句,因为默认情况下beanshell返回最后一个计算的表达式

      Integer answer =  (Integer) i.eval("int x=2; int y=3; int res=x+y; return res");
    
  2. # 2 楼答案

    我没有测试您的脚本,但我怀疑您缺少HashSet的import语句。实际上,脚本中不需要HashSet声明。因为您在调用之前设置了“hs”,所以解释器知道这一点。您的脚本应该如下所示:

       srcCode = "for(i=0;i<10;i+=2){ hs.add(i); }";
    

    请注意,关于第一个问题,如果在调用之前没有设置“hs”,则需要显式返回它,因为最后一个计算表达式(hs.add(i))返回布尔值。但是,由于您正在传递对“hs”的引用,因此根本不需要返回它