犀牛:在Javascript实现访问Java接口变量(Rhino: Access Java inte

2019-09-03 13:27发布

犀牛:如何访问Javascript实现Java接口的变量?

我露出一个java接口,用于其他方,让他们提供JavaScript中的相同的实现。

public interface APIInterface{

    public static APIUtils util = new APIUtils();

    public ArrayList getAllObjects(Object aTransaction);
}

Javascript实现:

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

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

}

我想的JavaScript接口的实现了解接口变量util ,而不必把它作为一个额外的参数的功能或通过将其添加到ScriptEngine 。 这是技术上是可行的?

Answer 1:

对于接口...

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

...静态member¹ X可以访问两种方式。

1)通过类型:

var x = Packages.foo.Iface.X;

2)通过反射:

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

测试在犀牛1.7R4。

¹All变量是隐式public static final的接口。



文章来源: Rhino: Access Java interface variables in Javascript implementation