gpt4 book ai didi

java - 将 JRuby 对象传递给 Java 方法?

转载 作者:行者123 更新时间:2023-12-01 11:54:37 24 4
gpt4 key购买 nike

如何将 JRuby 对象(这是一个非常简单的对象,包含一些字符串和哈希类型的字段)传递给 Java 类中定义的方法?

这里的 UPD 是我需要在 JRuby 和 Java 代码之间共享的类型的序列化内容:


--- !ruby/object:LogStash::Event
取消:假
数据:&1
消息:“q\r”
'@版本':'1'
'@时间戳': 2015-02-17 12:10:17.695000000 Z
类型:人类
访问器: !ruby/object:LogStash::Util::Accessors
商店:*1
卢特:
类型:
- *1
- 类型
主持人:
- *1
- 主持人
该对象是由 JRuby 端创建的。理想情况下,我可以直接从 Java 访问该对象并对其进行修改。不太理想的是,我需要将其转换为 Java 可以理解的内容,然后再转换回来。

最佳答案

只需指定 ObjectIRubyObject方法中的参数签名,当您从 Ruby 脚本调用 Java 方法时,它会正常工作...

更新:假设 LogStash::Event您可以使 Java 签名接受 (IRubyObject event)然后使用event.callMethod("cancelled?").isTrue()在 Java 端也类似或者:

...如果您主要只需要它的 @data在 Java 端,内部 Ruby 哈希可以轻松地 retrieved使用:event.to_hash将其传递给接受 (Map<String, ?> eventData) 的 Java 签名您可以轻松检索eventData.get("message")甚至更新数据eventData.put("message", 42)它将在 Ruby 端反射(reflect)出来,无需额外工作,因为 Ruby 哈希实现了 Map 接口(interface),因此无需转换即可传递(它将在内部处理简单的 Ruby 到 Java 字符串转换和类似的自动神奇操作)

否则(为了理智)我建议引入一个简单的桥接对象,它将事件包装到 Java 中并处理您需要在 Java 端调用的用例。

关于java - 将 JRuby 对象传递给 Java 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28538203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com