java - 我可以在 Oracle 的 JDK7 JSR223 JavaScript 引擎中扩展 Java 类吗?

标签 java javascript jsr223

我正在尝试编写 JavaScript 来定义一个扩展现有 Java 类的类,该类是从 JSR223 ScriptEngine 调用的。我知道JavaAdapter works for an Interface, but not a Class .

ScriptEngine js = new ScriptEngineManager().getEngineByExtension("js");
js.eval("new java.lang.Runnable {run: function() { ... } }"); // works
js.eval("new java.util.TimerTask {run: function() { ... } }"); // throws

我知道这就是文档所说的我应该期待的。我也知道,一旦我可以切换到 Nashorn,所有这些都会消失,我将可以轻松访问 Java.extend() 等,但目前我仍坚持使用JDK7。

鉴于这一切,有什么办法可以做到这一点吗?我认为我的后备方案将直接切换到 Mozilla 的 native Rhino 绑定(bind),但我更愿意使其尽可能抽象。

最佳答案

它会抛出什么?

jjs> var tt = new java.util.TimerTask {run: function() { print("hello"); }}
jjs> tt.run();
hello
null

我通常完全跳过 TimerTask

// Daemon flag seems to be ignored.
var timer = new java.util.Timer(false);
timer.schedule(function() print("Hello"), 1000);

// Give timer a chance to run before exit.
java.lang.Thread.sleep(5000);

关于java - 我可以在 Oracle 的 JDK7 JSR223 JavaScript 引擎中扩展 Java 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486016/

相关文章:

javascript - 使用javascript在php代码中显示标签的值

java - JMeter - Velocity JSR223 脚本不能使用 JMeter 变量/环境

java - 为什么我在 spring mvc 中的 @Valid 上收到错误

java - 在我的希尔排序程序中计算比较和交换

javascript - 测试 Vue 组件方法

javascript - Ember.js 组件集成测试 : How to work with global injections and nested components?

java - 使用包含运算符的字符串作为 if 语句中的变量

c# - 系统编程语言和应用程序编程语言之间的区别

java - 我应该为每个线程使用单独的 ScriptEngine 和 CompiledScript 实例吗?