JRuby - TypeError:没有#<class:> </class:>的公共构造函数

时间:2012-10-17 13:30:08

标签: jruby

我正在尝试通过JRuby 1.7 RC2使用java.security.KeyPairGenerator,如下代码所示:

require 'java'
kp = java.security.KeyPairGenerator.getInstance("RSA")
puts kp #java.security.KeyPairGenerator$Delegate@45f177b

但是,当我尝试调用initialize即<。p>时

kp.initialize(2048)

我收到以下异常: -

TypeError: no public constructors for #<Class:0x7efe8e7a>

非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

这是ruby的initialize方法(它是ruby世界中的构造函数)与此特定java类中的方法之间的一个小冲突。

通常情况下,人们不会在ruby类上调用initialize(而是调用new),但无论如何它似乎都会给解释器带来一些混乱。

如果查看kp.methods的输出,您会看到JRuby添加了initialize__method来规避冲突(注意双下划线)。

试试这个:

require 'java'
kp = java.security.KeyPairGenerator.getInstance("RSA")
kp.initialize__method(2048)

另一种技术是使用java_method,当解释器在选择正确的过载时遇到问题也很有用。

E.g:

m = kp.java_method :initialize, [Java::int]
m.call(2048)