一、javascript中调用java的类库
js> Math = java.lang.Math
[JavaClass java.lang.Math]
js> function f(){print(Math.sin(Math.PI/2));}
js> f()
1
Rhino支持在javascript中使用java中所有的类库,包括用户自己定义的类库,不过需要事先将这些package或者class使用importPackage()引入到当前上下文中。
二、Java中使用javascript
1.javascript Function作为Java接口的实现类
要使用这一特性,必须声明一个具有和要实现的接口里面定义的方法同名的Object:js> obj = { run: function () { print("\nrunning"); } }
[object Object]
js> obj.run()
js> r = new java.lang.Runnable(obj);
js> t = new java.lang.Thread(r)
js> t.start()
上面的代码中使用了一个javascript的Function作为java.lang.Runnable接口的实现类,实现了其中的public void run(){}方法,运行结果是running。
也可以直接将javascript的Function作为接口的实现类:
js> t = java.lang.Thread(function () { print("\nrunning"); });
Thread[Thread-0,5,main]
js> t.start()
js>
running
这种写法更加简单。
2.javascript对象继承Java类
js> var obj2 = { speak: function() { print('Rhino rocks!') }}
js> obj2.run = function() { this.speak() }
js> var foo = new JavaAdapter(Thread, obj2)
js> foo.start()
Rhino rocks!
使用JavaAdapter可以继承一个或多个Java类,
new JavaAdapter(javaIntfOrClass, [javaIntf, ..., javaIntf,] javascriptObject)
其中javaIntOrClass可以是Java接口或者普通的类。