java调用ruby的接口_如何从JRuby获得Java接口的正确类型的ruby实现?

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

我的示例实现如下所示:

接口:

package some.package;

import java.util.List;

public interface ScriptDemoIf {

int fibonacci(int d);

List filterLength(List source, int maxlen);

}

Ruby实现:

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 filterLength(List 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_implements,Ruby部分的整个使用点都是为了正确编译接口实现。

我究竟做错了什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值