Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在Oracle';中扩展Java类吗;s JDK7 JSR223 JavaScript引擎?_Java_Javascript_Jsr223 - Fatal编程技术网

我可以在Oracle';中扩展Java类吗;s JDK7 JSR223 JavaScript引擎?

我可以在Oracle';中扩展Java类吗;s JDK7 JSR223 JavaScript引擎?,java,javascript,jsr223,Java,Javascript,Jsr223,我正在尝试编写JavaScript,它将定义一个扩展现有Java类的类,该类从JSR223ScriptEngine调用。我知道 我知道医生说这是我应该期待的。我还知道,一旦我可以切换到Nashorn,所有这些都将消失,我将可以很好地访问Java.extend(),等等,但目前我仍然使用JDK7 考虑到所有这些,有没有办法做到这一点?我认为我的退路将是直接切换到Mozilla的原生Rhino绑定,但我更愿意让它尽可能抽象 jjs> var tt = new java.util.TimerTa

我正在尝试编写JavaScript,它将定义一个扩展现有Java类的类,该类从JSR223
ScriptEngine
调用。我知道

我知道医生说这是我应该期待的。我还知道,一旦我可以切换到Nashorn,所有这些都将消失,我将可以很好地访问
Java.extend()
,等等,但目前我仍然使用JDK7

考虑到所有这些,有没有办法做到这一点?我认为我的退路将是直接切换到Mozilla的原生Rhino绑定,但我更愿意让它尽可能抽象

jjs> var tt = new java.util.TimerTask {run: function() { print("hello"); }}
jjs> tt.run();
hello
null
我通常完全跳过计时器任务

// 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);

我想我已经明白了。我的印象是我只能实现一个接口,但事实证明你也可以扩展一个具体的类——只有抽象类才会抛出我描述的错误

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

这已经足够满足我的需要了——不过文档肯定会更清晰

我并不是真的想做一个计时器,我只是想找一个简单的例子,说明一个类不起作用。它抛出
sun.org.mozilla.javascript.internal.EvaluatorException
,并显示消息“第一个参数应该是接口类:类java.util.TimerTask是接口或抽象”。
ScriptEngine js = new ScriptEngineManager().getEngineByExtension("js");
js.eval("new java.lang.Runnable() {run: function() { ... } }"); // works
js.eval("new java.lang.Thread() {run: function() { ... } }"); // works
js.eval("new java.util.TimerTask() {run: function() { ... } }"); // throws