这是否可以使用javascript来调用java方法?

java有一个脚本管理器,允许java调用javascript,如下所示:

import javax.script.*; public class ExecuteScript { public static void main(String[] args) throws Exception { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager(); // create a JavaScript engine ScriptEngine engine = factory.getEngineByName("JavaScript"); // evaluate JavaScript code from String engine.eval("print('Welocme to java world')"); } public static void sayHi(){ System.out.println("hihi"); } } 

我的问题是,如果我有一个sayHi()函数,我可以使用javascript,通过脚本引擎来调用Java函数吗? 谢谢。

从JavaDocs快速入侵。

 import javax.script.*; public class ExecuteScript { public static void main(String[] args) throws Exception { // create a Java object ExecuteScript es = new ExecuteScript(); // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager(); // create a JavaScript engine ScriptEngine engine = factory.getEngineByName("JavaScript"); // evaluate JavaScript code from String engine.eval("println('Welcome to Java world')"); // add the Java object into the engine. engine.put("es",es); ScriptEngineFactory sef = engine.getFactory(); String s = sef.getMethodCallSyntax("es", "sayHi", new String[0]); // show the correct way to call the Java method System.out.println(s); engine.eval(s); } public static void sayHi(){ System.out.println("hihi"); } } 

产量

 Welcome to Java world es.sayHi() hihi Press any key to continue . . . 

以下代码段

 package org.test.script; import javax.script.*; public class ExecuteScript { public static void main(String[] args) throws Exception { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager(); // create a JavaScript engine ScriptEngine engine = factory.getEngineByName("JavaScript"); // evaluate JavaScript code from String engine.eval("" + "importPackage(org.test.script);\n" + "print('Welocme to java world\\n');\n" + "ExecuteScript.sayHi();"); } public static void sayHi() { System.out.println("hihi"); } } 

输出

 Welocme to java world hihi 

我不确定你使用的是什么脚本管理器,但是对于Rhino,你可以做类似的事情

 var date = new java.util.Date(); print(date); 

因此,使用您的示例,您应该能够像静态方法一样调用它:

 ExecuteScript.sayHi();