Domanda

Non sono davvero sicuro di come posso spiegarlo, ma qui va:

Voglio essere in grado di " inserire " alcuni comandi in parti del mio codice che verranno caricati da file esterni. Per analizzare ed eseguire questi comandi, presumibilmente devo usare alcuni script come il metodo eval di BeanShell. Il problema è che non sembra riconoscere l'istanza / metodo all'interno. Come esempio molto semplice, voglio fare qualcosa come

    public void somethingHappens()
    {
        Foo foo = new Foo();
        Interpreter i = new Interpreter();
        i.eval("print(foo.getName());");
    }

È possibile? Dovrei usare altri strumenti di scripting?

È stato utile?

Soluzione

Se si utilizza 1.6, è possibile utilizzare il supporto JavaScript incorporato.

La Java Scripting Programmer's Guide spiega come importare le classi Java nel tuo script.

Esempio di codice 9 in questo articolo spiega come passare oggetti nell'ambito dello script.

Altri suggerimenti

Utilizzando beanshell, questo è qualcosa che puoi provare

package beanshell;

import bsh.EvalError;
import bsh.Interpreter;

public class DemoExample {

    public static void main( String [] args ) throws EvalError  {
        Interpreter i = new bsh.Interpreter();
        String usrIp = "if(\"abc\".equals(\"abc\")){"
                + "demoExmp.printValue(\"Rohit\");"
                + "}";

        i.eval(""
                + "import beanshell.DemoExample;"
                + "DemoExample demoExmp = new beanshell.DemoExample();"
                + ""+usrIp);
    }

    public static void printValue(String strVal){
        System.out.println("Printing Value "+strVal);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top