[英]Can I extend a Java class in Oracle's JDK7 JSR223 JavaScript engine?
我正在嘗試編寫JavaScript,該JavaScript將定義一個擴展現有Java類的類,該類從JSR223 ScriptEngine
調用。 我知道JavaAdapter適用於接口,但不適用於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的本機Rhino綁定,但是我更希望將其保持盡可能抽象。
它會拋出什么?
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);
我想我已經知道了。 我的印象是我只能實現一個接口,但是事實證明,您還可以擴展一個具體的類-只有抽象類才會拋出我所描述的錯誤。
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
這足夠滿足我的需求-但是文檔絕對可以更清晰!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.