我發現了一些關於使用Mozilla的Rhino在Javascript和Java之間對類定義進行混洗的問題。我已經得到了足夠遠,這種工作原理:我可以使用ScriptableObject在Java中構建Rhino JavaAdapter嗎?
的Javascript:
new JavaAdapter(MyClass, {foo: function(){return 'Hello!';}});
的Java
String script = // the above stuff
Object o = context.evaluateString(scope, script, "UserScript", 1, null);
MyClass mc = (MyClass) Context.jsToJava(o, MyClass.class);
mc.foo(); // returns "Hello!"
這把我嚇倒了,但我想從JavaScript移動JavaAdapter的建設Java方面。我正在編寫一個框架,用戶可以在Javascript中定義邏輯,並且他們必須粘貼更快樂的樣板文件。
理想情況下,我可以這樣做:
的Javascript:
{foo: function(){return 'Hello!';}};
的Java
String script = // the above stuff
Object o = context.evaluateString(scope, script, "UserScript", 1, null);
MyClass mc = new JavaAdapter(MyClass.class, o);
mc.foo(); // returns "Hello!"
但據我可以告訴JavaAdapter的構造函數不帶任何參數,有沒有任何文件爲任何地方的類(例如,它不是here),我還沒有找到任何靜態方法(例如Context
或ScriptableObject
)創建這樣一個類。我也試過Context.jsToJava(o, MyClass.class)
,但是引發了一個例外。
我知道這是一個古老的問題,但我仍然有點在這工作。值得注意的是:我發現我的'JavaInterface''d「subclass」可以調用'protected'超類方法,但不能訪問'protected'超類字段/變量。我猜這是預期的行爲?我只是添加了愚蠢的單線getter和setter,但似乎不應該有必要。 – Coderer 2013-06-10 12:36:11