3

このJava コードが JRuby でどのように表示されるかを確認したいと思います。

 ParseQuery query = new ParseQuery("MyClass");
 query.getInBackground(myId, new GetCallback() {
   public void done(ParseObject object, ParseException e) {
     if (e == null) {
       objectWasRetrievedSuccessfully(object);
     } else {
       objectRetrievalFailed();
     }
   }
 });

私にとって混乱の最大の部分は、匿名の内部クラスです。これは私の最高の最初の推測です:

query = ParseQuery.new("GameScore")
query.getInBackground("xWMyZ4YEGZ", Class.new(GetCallback) do
  def done(object, e)
    #  ...
  end 
end.new)

更新: これに基づいて編集: http://www.ruby-forum.com/topic/188599#823271

4

1 に答える 1

1

JRuby でこれを表現するための構文は、一見単純です。JRuby には「クロージャ変換」と呼ばれる機能があり、メソッドに渡されたクロージャを適切な Java インターフェイスに変換できます。JRuby ドキュメントから:

これは、イベント リスナーや Runnable だけでなく、基本的にすべてのインターフェイスで機能します。インターフェースを期待するメソッドを呼び出すと、JRuby はブロックが渡されたかどうかをチェックし、ブロックをインターフェースを実装するオブジェクトに自動的に変換します。

したがって、コードは次のようになります。

query.in_background 'xWMyZ4YEGZ' { |object, e|
  # do stuff
}

JRuby wikiの「JRuby から Java を呼び出す」ページは、このような問題の優れたリソースです。

于 2012-08-18T20:50:20.007 に答える