0

次のコードに従って、JRuby1.7RC2を介してjava.security.KeyPairGeneratorを使用しようとしています。

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

ただし、initializeを呼び出そうとすると

kp.initialize(2048)

次の例外が発生します:-

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

任意の提案をいただければ幸いです。

4

1 に答える 1

2

initializeこれは、Ruby のメソッド (Ruby の世界ではコンストラクター) と、この特定の Java クラス のメソッドとの間の小さな衝突です。

通常、initializeRuby クラスを呼び出すことはありません (new代わりに呼び出します) が、とにかく、インタープリターに混乱を引き起こしているようです。

の出力を見ると、衝突を回避するためにkp.methodsJRuby が a を追加したことがわかります(アンダースコアが 2 つあることに注意してください)。initialize__method

これを試して:

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

もう 1 つの手法は、java_methodを使用することです。これは、インタープリターが適切なオーバーロードを選択するのに問題がある場合にも役立ちます。

例えば:

m = kp.java_method :initialize, [Java::int]
m.call(2048)
于 2012-10-18T00:49:20.887 に答える