将Parse Java SDK转换为JRuby

时间:2012-08-15 02:35:20

标签: java jruby parse-platform

我想看看这个Java code在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

1 个答案:

答案 0 :(得分:1)

在JRuby中表达它的语法看似简单。 JRuby有一个名为“闭包转换”的功能,其中传递给方法的闭包可以转换为适当的Java接口。来自JRuby docs

  

这不仅适用于事件监听器或Runnable,而且适用于任何接口。在调用需要接口的方法时,JRuby会检查是否传递了块,并自动将块转换为实现接口的对象。

所以,你的代码看起来像是:

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

JRuby wiki上的'calling Java from JRuby'页面是解决此类问题的良好资源。