2012-10-17 36 views
0

我试图通过JRuby中使用java.security.KeyPairGenerator 1.7 RC2按照下面的代码:的JRuby - 类型错误:没有公共构造#<Class:>

require 'java' 
kp = java.security.KeyPairGenerator.getInstance("RSA") 
puts kp #[email protected] 

然而,当我尝试调用初始化即

kp.initialize(2048) 

我得到以下异常: -

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

任何竟被建议非常感谢。

回答

2

这是Ruby的initialize方法之间的一个小冲突(这是Ruby世界一个构造函数),并在这一特定的Java类中的方法。

通常情况下,您不会在红宝石类上调用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) 
+0

非常感谢这个问题一个很好的说明/回答! – user1513388

相关问题