2013-05-16 26 views
2

Rhino:如何在Javascript實現中訪問Java接口變量?犀牛:在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 。這在技術上可行嗎?

回答

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。

1接口上的所有變量都隱式地爲public static final