繁体   English   中英

将JRuby对象传递给Java方法?

[英]Passing JRuby objects to Java methods?

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

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

--- !ruby/object:LogStash::Event cancelled: false data: &1 message: "q\\r" '@version': '1' '@timestamp': 2015-02-17 12:10:17.695000000 Z type: human accessors: !ruby/object:LogStash::Util::Accessors store: *1 lut: type: - *1 - type host: - *1 - host该对象由JRuby端创建。 理想情况下,我可以直接从Java访问此对象并进行修改。 不太理想的是,我需要将其转换为Java可以理解的内容,然后再转换为Java。

只需在方法中指定一个ObjectIRubyObject参数签名,当您从Ruby脚本调用Java方法时,它就可以正常工作...

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

...如果您只需要在Java端使用@data ,则可以使用以下event.to_hash轻松检索内部Ruby Hash: event.to_hash传递给接受Java签名的(Map<String, ?> eventData)您可以轻松检索eventData.get("message")甚至更新数据eventData.put("message", 42) ,由于Ruby哈希实现Map接口,因此无需额外的工作即可反映在Ruby端,因此无需转换即可传递(它将在内部处理从Ruby到Java的简单Ruby字符串转换,以及类似的自动转换)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM