如何从 JRuby 获取 Java 接口的类型正确的 ruby​​ 实现?

2024-03-27

我正在尝试从 Java 应用程序使用 JRuby(通过 JRuby 1.5 中包含的 JSR233 接口)来加载 Java 接口的 ruby​​ 实现。

我的示例实现如下所示:

界面:

package some.package;
import java.util.List;
public interface ScriptDemoIf {
    int fibonacci(int d);
    List<String> filterLength(List<String> source, int maxlen);
}

红宝石实现:

require 'java'
include Java

class ScriptDemo
  java_implements some.package.ScriptDemoIf
  java_signature 'int fibonacci(int d)'
  def fibonacci(d)
    d < 2 ? d : fibonacci(d-1) + fibonacci(d-2)
  end

  java_signature 'List<String> filterLength(List<String> source, int maxlen)'
  def filterLength(source, maxlen)
    source.find_all { |str| str.length <= maxlen }
  end
end

类加载器:

public ScriptDemoIf load(String filename) throws ScriptException {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("jruby");
    FileReader script = new FileReader(filename);
    try {
        engine.eval(new FileReader(script));
    } catch (FileNotFoundException e) {
        throw new ScriptException("Failed to load " + filename);
    }
    return (ScriptDemoIf) m_engine.eval("ScriptDemo.new");
}

(显然,加载器在现实生活中更通用 - 它不假设实现类名称是“ScriptDemo” - 这只是为了简单起见)。

问题 - 我在加载程序的最后一行遇到类转换异常 -engine.eval()返回一个RubyObject类型不能很好地转换到我的界面。从我在网上读到的东西来看,我的印象是整个使用点java_implementsRuby 部分中的内容是为了正确编译接口实现。

我究竟做错了什么?


应该是这样,但不幸的是还没有完全按照这种方式连接。目前,#java_implements and #java_signature仅由jrubyc --java用于创建基于 Ruby 类的 Java 源文件的命令。您可能需要考虑将其用于 Ruby 集成。

我们的目标是让这个示例将来适用于预编译脚本和运行时执行的脚本。如果您希望此脚本按预期工作,请尝试使用include Java::some.package.ScriptDemoIf代替java_implements.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 JRuby 获取 Java 接口的类型正确的 ruby​​ 实现? 的相关文章

随机推荐

  • 无法对文档执行 querySelectorAll。怎么修?

    我在做什么 我有从 PHP 数组生成的链接 该数组生成它自己的唯一 ID 该 ID 应该指向它自己的模态 弹出窗口 div 该 div 具有与链接 ID 匹配的 ID 模态框也是使用 PHP 数组自动生成的 我收到这个错误 我对此非常陌生
  • REPLACE INTO 查询是好的做法吗?

    我需要一个 SQL 查询来更新或创建数据库条目 如果某个客户尚不存在 我在网上找到了目前的解决方案 command CommandText REPLACE INTO Resource Tracer dbo Customer Customer
  • 如何登录 OpenEdge Progress?

    我找到了在 Progress 4GL 中记录某些内容的不同方法 但没有一个令人满意 简单的MESSAGE语句的缺点是它对帧的处理非常糟糕 ON CHOOSE OF btn Q4 DO MESSAGE Line 1 MESSAGE Line
  • struts2 中的 JQuery Grid - 初学者

    我对 struts2 和 JQuery 编程很陌生 在我的应用程序中 当调用 loginAction 时 如果用户是管理员 我会将他们定向到 AdminLoadAction 此操作加载 adminHome jsp 我需要的是 adminHo
  • 有没有办法将--compressed传递到PHP的curl_setopt()中?

    使用curl时 我发现我所访问的服务器上的行为有所不同 具体取决于我是否通过 compressed作为一个论点或不 我已经将 Accept Encoding 标头设置为 gzip deflate sdch curl setopt ch CU
  • 使用 NSPredicate 搜索 NSFetchedResultsController

    我已经被这个问题困扰了一段时间 并已尽力找出解决方案 我正在使用 Core Data 而且对于 iOS 编码来说相对较新 我在如何搜索 fetchedResultsController 以过滤掉用户在 searchBar 中输入的字符串时遇
  • kubernetes 中的 PreStop 钩子永远不会被执行

    我正在尝试创建一个小 Pod 示例 其中包含两个通过 emptyDir 卷共享数据的容器 在第一个容器中 我等待了几秒钟 然后它就被销毁了 在 postStart 中 我正在将一个名为 started 的文件写入共享卷 在 preStop
  • 即使有请求,为什么 gcc 也不抱怨数组边界?

    我正在使用 gcc 4 9 0 我希望看到编译器警告我超出数组范围 如果我编译这个 int main int table 5 0 table 8 1234 int x table 10 使用 g O2 Wall main cpp o mai
  • 如何使用 jQuery 将行追加到表中?

    您好 我尝试使用 jQuery 在表中添加一行 但它不起作用 可能是什么原因 而且 我可以为新添加的行添加一些值吗 这是代码
  • 地理数据网络服务

    我正在考虑编写一个程序来检查英国议会议员最近提出的一些里程声明 实际上大约有 45 000 个里程 我所掌握的数据相当准确 旅行的出发地和目的地通常仅 在城镇级别提供 我想做的基本上是查看他们提交的里程数据 查看从网络服务获得的 计算 里程
  • 当 Node.js 内部仍然依赖于线程时,它如何本质上更快?

    我刚刚观看了以下视频 Node js 简介 http www yuiblog com blog 2010 05 20 video dahl 并且仍然不明白如何获得速度优势 主要是 Ryan Dahl Node js 的创建者 曾经说过 No
  • Android Ion 缓存刷新

    我使用特定的网址在线获取图像 但网址本身每隔几分钟就会自动更改 我正在使用 ION 库Here https github com koush ion我遇到的问题是 当我刷新页面时 页面本身看起来正在刷新 但出现了完全相同的图片 我假设它是缓
  • 使用 Silverlight 的本地数据库

    对于 Silverlight 应用程序来说 什么是好的本地数据库 数据库的主要用途是提供本地数据缓存和同步服务 我不相信 SQL Anywhere 或 SQLite 会工作 因为它们使用非托管代码 无法在 silverlight 沙箱下运行
  • 如何对 Android 应用程序进行定时炸弹?

    大家好 有没有人有一个代码示例 说明如何对 Android 应用程序进行定时炸弹 使其在给定日期后无法运行 我想发布一个 测试版 应用程序进行测试 但希望确保它仅在该应用程序正式处于测试版时才能工作 我建议使用 Calendar 类并让您的
  • Android:从软键盘中删除 Enter 键

    在我的登录表单中 当用户单击 EditText 并按 Enter 键时 会插入一个新行 从而增加 EditText 的大小 下一刻 它返回到之前的位置 并在密码字段 这是下一个字段 中打印一个点 我想从软键盘上删除这个回车键 是否可以 Us
  • Android java.lang.ClassCastException:android.widget.LinearLayout 无法转换为 android.widget.TextView

    我试图打印在 listView 中单击的值 但随后出现以下异常 07 04 10 40 56 482 E AndroidRuntime 1356 FATAL EXCEPTION main 07 04 10 40 56 482 E Andro
  • Reactjs 状态未更新

    constructor props super props this state active false showSideBar false className componentDidMount if this props overla
  • 创建包含所有可能变体的产品数组

    我正在尝试生成一个包含产品所有变体的数组 可以有无限数量的属性和变化 提供的数组 Shirt Product Color Attribute Green Variation Red Blue Size Small Medium Large
  • 什么时候返回右值引用会导致未定义的行为?

    在 Stack Overflow 的回答中here https stackoverflow com a 9964002 1128289 Kerrek 发布了以下代码 Foo g Foo y return y error cannot bin
  • 如何从 JRuby 获取 Java 接口的类型正确的 ruby​​ 实现?

    我正在尝试从 Java 应用程序使用 JRuby 通过 JRuby 1 5 中包含的 JSR233 接口 来加载 Java 接口的 ruby 实现 我的示例实现如下所示 界面 package some package import java