快速业务通道

在Ruby on Rails应用程序中重用Java代码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
tstream_instance._classname p "------------------------------" p "For the TarArchive instance...." p "Expecting: com.ice.tar.TarArchive , it is: " + tararchive_instance._classname

导入 Java 类

清单 1 中的前三行将调用 RJB 的 import 方法,将所需的类分别导入到 Ruby 变量 tararchive、fileinputstream 和 file 中。必须指定类的完整包路 径 — 例如,TarArchive 类为 com.ice.tar.TarArchive,而 FileInputStream 类为 java.io.FileInputStream — 就像使用 java 命令运行应用程序那样。

实例化导入的类

接着,清单 1 创建导入类的对象。可以通过调用每个类的 new 方法创建类 ,就像创建任何 Ruby 对象一样(例如,tararchive.new)。但是这样做会调用 TarArchive 类的默认的构造函数(没有参数),而您并不希望这样做。

当重载了类的构造函数后,需要对上面的对象创建方法进行一些修改。在这 种情况下,必须按照下面的方式创建对象:

object = Classname.new_with_sig(''signature'', parameter[,more  parameters])

第一个参数定义构造函数所需的参数的签名类型。它告诉 RJB 调用其输入参 数匹配指定签名的构造函数。

清单 1 中的第 4 个和第 5 个语句分别创建 file 和 fileinputstream 类 的对象,它们调用相应的构造函数,参数类型为 String。

在清单 1 的第 6 个语句中,TarArchive 类的其中一个构造函数接受 InputStream 类型的对象作为参数。该语句的签名类型是一个单独的 InputStream 输入参数。这些类型签名的详细细节在 getName API 的 Java SDK 文档中做了很好的描述。第二个参数是创建的 InputStream 类型对象。

检验对象创建

清单 1 中的其余内容将检验 RJB 创建的对象是否是指定类的对象,方法是 调用添加到每个对象的 _classname 方法。例如,调用 tararchive_instance._classname 将返回 com.ice.tar.TarArchive,这意味着 类被正确装载,并成功创建了该类的对象。

在Ruby on Rails应用程序中重用Java代码(4)

时间:2010-12-03 IBM Santhosh Krishnamoor

调用方法并捕获结果

将类装载到 Ruby 并从中创建了对象后,下一步是调用需要的方法并查看结 果。例如,您希望使用 TarArchive 类的 extractContents 方法,将样例文件 (test.tar)的内容提取到当前目录中。

和构造函数一样,可以使用两种方式调用方法。一种方式是直接调用方法, 例如:

tararchive_instance.extractContents(file_instance)

当方法重载后,使用 _invoke 调用指定方法的每个参数的类型签名:

tararchive_instance._invoke(''extractContents'',  ''Ljava.io.File;'', file_instance)

这一步可以使 RJB 知道在方法重载时应该调用哪些方法。

和对待普通 Ruby 代码一样,您将捕获对象方法返回的结果(如果有的话) ,并在自己的应用程序中使用结果。方法调用返回的结果被自动转换为相应的对 象类型。您只需在对象内直接调用方法。

Java TarArchive 类中实现的功能现在可以用于您的 Ruby 代码。通过使用 相同的方法,Java 代码中已实现的任何功能可以不加修改地在您的 Ruby 和 Rails 应用程序中重用。

完整的代码

清单 2 展示了本教程示例的完整 Ruby 代码(也可以通过 下载 获得):

清单 2. 完整的示例 Ruby 代码

# Include ''rjb'' library  into your application require ''rjb'' # Load the JVM specifying the jar files to include and  any other optional JVM arguments Rjb::load(classpath = ''.:/path/to/tar.jar'', jvmargs=[]) # Import the classes you want to use into a Ruby  variabl

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号