0

我正在尝试按照以下代码通过 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>

任何建议将不胜感激。

4

1 回答 1

2

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

通常,不会调用initializeruby​​ 类(而是调用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)
于 2012-10-18T00:49:20.887 回答