3

Java でスーパークラスを定義し、Ruby でサブクラスを定義し、Java でそのサブクラスのインスタンスを作成したいと考えています。このようなちょっとしたもの:

// Java superclass
package myPkg;

public class Sup{
  public Sup(){}
  public abstract void foo(String a);
}

--

# Ruby code
include Java
require 'jruby/core_ext'

include_class 'myPkg.Sup'

class RubySub < Java::myPkg.Sup
  def foo( a )
    puts a;
  end
end

RubySub.become_java!
RubySub

--

// Back in Java land
Ruby runtime =  Ruby.newInstance();
IRubyObect ro = runtime.evalScriptlet(theRubyCodeAbove);
Class<Sup> clz = (Class<Sup>) JavaEmbedUtils.rubyToJava(runtime, ro, Class.class);
clz.newInstance().foo("Hey!");

上記のコードを試しましたが、newInstance()呼び出しから InstantiationException が発生します。実行時にクラスを Ruby で宣言したいので、たとえば jrubyc を実行して Ruby コードを事前に Java クラス定義にコンパイルすることはできません。ここで何が間違っていますか?

デバッガーで一番下のコード セグメントを実行しましたが、確実に呼び出しから RubyClass オブジェクトが返されていevalScriptlet()ます。RubyClassa を aに変換するための追加の手順が含まれている可能性がありClassます。


更新: 私はリードbecome_java!を持っています -クラスが Java クラスのサブクラスである場合、どうやら動作しません。これを行う別の方法はありますか、それとも骨が折れただけですか?

4

1 に答える 1