我正在尝试通过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>
非常感谢任何建议。
答案 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)