JRuby - 类型错误:#<Class:> 没有公共构造函数



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

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

但是,当我尝试调用初始化时,即

kp.initialize(2048)

我得到以下异常:-

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

任何建议将不胜感激。

这是 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,当解释器在选择正确的重载时遇到问题时,这也很有用。

例如:

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

相关内容

  • 没有找到相关文章

最新更新