Rhino: Access Java interface variables in Javascript implementation

亡梦爱人 提交于 2019-12-02 02:21:47

问题


Rhino: How to access Java interface variables in Javascript implementation?

I expose a java interface for some other party to let them provide an implementation for the same in javascript.

public interface APIInterface{

    public static APIUtils util = new APIUtils();

    public ArrayList getAllObjects(Object aTransaction);
}

Javascript implementation:

/** Core Interface Method **/
new Object() {

  getAllObjects: function(tran) {
        tran.set(..); //OK  
        tran.set(..); //OK
        util.callSomeFunction(); //Fails here..Rhino doesn't understand util.. 
  }    

}

I want the javascript implementation of the interface to understand the interface variable util without having to pass it as an additional argument to the function or by adding it to the ScriptEngine. Is this technically possible?


回答1:


For the interface...

package foo;
public interface Iface {
  String X = "Hello, World!";
  void invoke();
}

...static member¹ X can be accessed two ways.

1) Via the type:

var x = Packages.foo.Iface.X;

2) Via reflection:

var impl = new Packages.foo.Iface({
  invoke : function () {
    var x = this.getClass().getField("X").get(null);
    java.lang.System.out.println(x);
  }
});
impl.invoke();

Tested on Rhino 1.7R4.

¹All variables are implicitly public static final on interfaces.



来源:https://stackoverflow.com/questions/16580164/rhino-access-java-interface-variables-in-javascript-implementation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!