2012-08-15 56 views
3

我想看看这个Java code看起来JRuby中:翻译解析的Java SDK 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

在JRuby中表达这种语法看似简单。 JRuby有一个叫做“闭包转换”的特性,在这个特性中,传递给方法的闭包可以转换成适当的Java接口。来自JRuby docs

这不仅适用于事件监听器或Runnable,而且基本上适用于任何接口。当调用期望接口的方法时,JRuby会检查是否传递一个块并自动将该块转换为实现该接口的对象。

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

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

'calling Java from JRuby'页上的JRuby的维基是像这些问题的很好的资源。