深入浅出Rhino:Java与JS互操作

发表于:2011-11-17 09:58

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:DoubleLife    来源:51Testing软件测试网采编

  JavaScript操纵Java对象

  1、Rhino如何访问Java包与类文件

  Java语法规定,任何代码都必须以class文件的形式存在,而每个class文件必须属于一个package,默认为default。而JavaScript并没有类似package的层级结构概念,那么如何使用Rhino访问Java类文件呢?

  Rhino定义了一个top-level变量Packages。变量Packages对应的所有属性均对应Java包名。比如,我们需要访问某一个Java的Package com.example。

js> Packages.com.example
[JavaPackage com.example]

  简单起见,我们也可以去掉变量Packages,直接输入Java包名。因此,上述Package com.example等价与com.example,如下:

js> com.example
 [JavaPackage com.example]

  刚才演示了如何通过js shell访问Java包,访问Java类的方式类似。假如我们需要访问标准的Java 文件类java.io.File,如下。

 js> java.io.File
[JavaClass java.io.File]

  或者,为避免输入全名,我们先导入包,然后输入Class类名,如下:

js> importPackage(java.io)
 js> File
 [JavaClass java.io.File]

  这里的importPackage(java.io),在效果上等价于Java声明import java.io.*; 不同的是,Java会隐式import java.lang.*,而Rhino不会。因为Rhino定义的对象Boolean, Math, Number, Object, String等与Java语法完全不同,两者无法等价。

  这里需要注意的是,Rhino对该语法的错误处理机制,当被访问的类存在时,Rhino加载该class,而当其不存在时,则把它当成package名称,而并不会报错。例如,当访问一个不存在的类com.example.AAA时,输入如下。

js> com.example.AAA
[JavaPackage com.example.AAA]

  仅当访问类AAA时,Rhino才会报错。

  2、Rhino如何与Java对象交互

  与Java类似,Rhino使用new操作符创建对象。

js> new java.util.Date()
 Thu Nov 03 16:19:04 CST 2011

  可以使用JavaScript变量存储Java对象,并调用其方法,如下:

  1. js> f = new java.io.File("sample.txt")  
  2.  sample.txt  
  3.  js> f.isDirectory()  
  4.  false

  对于static方法与变量,调用如下:

js> java.lang.Math.PI

  3.141592653589793

js> java.lang.Math.cos(0)

  1

  在JavaScript中,方法本身就是对象,这一点与Java不同。我们可以通过下列方式查看方法的重载:

  1. js> f.listFiles  
  2. function listFiles() {/*  
  3. java.io.File[] listFiles()  
  4. java.io.File[] listFiles(java.io.FilenameFilter)  
  5. java.io.File[] listFiles(java.io.FileFilter)  
  6. */}

53/5<12345>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • fox_bbi
    2011-11-29 17:15:06

    本文应取自IT168。地址http://tech.it168.com/a2011/1110/1271/000001271695_all.shtml

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号