Java ScriptEngine:在Java端使用值?
发布时间:2020-12-15 00:52:34 所属栏目:Java 来源:网络整理
导读:在 Java程序中,我正在调用用户定义的 JavaScript程序: File userJSFile=...;javax.script.ScriptEngineManager mgr=new ScriptEngineManager();javax.script.ScriptEngine scripEngine= mgr.getEngineByExtension("js");Object result=scripEngine.eval(new
在
Java程序中,我正在调用用户定义的
JavaScript程序:
File userJSFile=...; javax.script.ScriptEngineManager mgr=new ScriptEngineManager(); javax.script.ScriptEngine scripEngine= mgr.getEngineByExtension("js"); Object result=scripEngine.eval(new java.io.FileReader(userJSFile)); 现在我想使用’结果’:我怎样才能访问它?我可以将它识别为一个数组(我可以迭代扔掉它的成员),一个字符串,一个整数等等吗? 谢谢 编辑: 解决方法
除了简单的值之外,我宁愿让脚本引擎将其值强制转换为Java类型.
public class ScriptDemo { static class Result { private String[] words; public void setWords(String[] words) { this.words = words; } } static final String SCRIPT = "var foo = 'Hello World!';n" + "result.setWords(foo.split(' '));"; public static void main(String[] args) throws ScriptException { Result result = new Result(); javax.script.ScriptEngineManager mgr = new ScriptEngineManager(); javax.script.ScriptEngine scripEngine = mgr .getEngineByExtension("js"); scripEngine.getContext().setAttribute("result",result,ScriptContext.ENGINE_SCOPE); scripEngine.eval(SCRIPT); System.out.println(Arrays.toString(result.words)); } } 即使您无法编辑脚本,也可以获取返回值并将其传递给您自己生成的脚本以执行强制操作.这假设您了解返回的值. 编辑:因为对返回值一无所知,我首先使用Java(getClass())测试它是否是java.lang类型之一.如果返回的对象来自库的私有API,我会使用脚本语言(在本例中为JavaScript)对其进行内省,可能会将其强制转换为Java类型或在此过程中将其属性推送到某些Java数据结构中. 我的JavaScript很生疏,但John Leach的教程看起来很不错:JavaScript Introspection. (您可能可以使用Java反射,但由于引擎实现可能因Java版本/ JRE / JavaScript引擎而异,我不会依赖它.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Spring Boot中使用jdbctemplate 操作MYSQL数据库实例
- Java List.get()方法:获取列表指定位置的元素
- Java 中Math常用方法
- java.lang.StackOverflowError:视图中的堆栈大小为8MB
- JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、
- java – hashCode和equals为Collections.unmodifiableColle
- java – 在JAR中打包SQL数据库是一种好习惯吗?
- 根据URL下载图片至客户端、服务器的简单实例
- java – 遍历对象数组列表
- 是什么导致我的程序挂起而没有正常退出? (管道,读取系统调