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

最佳答案

在jruby中表达这一点的语法看似简单。JRuby有一个称为“闭包转换”的特性,在这个特性中,传递给方法的闭包可以转换成适当的Java接口。从JRuby docs开始:
这不仅适用于事件侦听器或可运行,而且基本上适用于任何接口。当调用需要接口的方法时,jruby检查是否传递了块,并自动将块转换为实现接口的对象。
所以,你的代码看起来像:

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

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

关于java - 将Parse Java SDK转换为JRuby,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11963400/

10-11 03:40
查看更多