WEB开发网
开发学院软件开发Java 在 Ruby on Rails 应用程序中重用 Java 代码 阅读

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

 2009-11-20 00:00:00 来源:WEB开发网   
核心提示: 调用方法并捕获结果将类装载到 Ruby 并从中创建了对象后,下一步是调用需要的方法并查看结果,在 Ruby on Rails 应用程序中重用 Java 代码(6),例如,您希望使用 TarArchive 类的 extractContents 方法,Java TarArchive 类中实现的功能现

调用方法并捕获结果

将类装载到 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 variable 
# specify the full package path to the classes. 
 
tararchive = Rjb::import('com.ice.tar.TarArchive') 
fileinputstream = Rjb::import('java.io.FileInputStream') 
file = Rjb::import('java.io.File') 
 
# Create objects of the classes. Use the new method directly or use 
# the 'new_with_sig' call to invoke overloaded constructors with arguments 
 
# Directory you want to extract the files in this case, the current directory 
 
file_instance = file.new_with_sig('Ljava.lang.String;','.') 
 
# inputstream instance of the file to extract 
 
fileinputstream_instance = fileinputstream.new_with_sig('Ljava.lang.String;','test.tar') 
 
# tararchive instance of the file to be extracted. 
 
tararchive_instance = tararchive.new_with_sig('Ljava.io.InputStream;'\ 
        ,fileinputstream_instance) 
 
# Invoke the method from the class and capture the results. 
# Use either the direct call of the method, 
# or the '_invoke' call to invoke overloaded methods. 
 
p 'Extracting file.....' 
 
tararchive_instance.extractContents(file_instance) 
 
p 'Done...' 

上一页  1 2 3 4 5 6 7  下一页

Tags:Ruby on Rails

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接