2012-08-15 38 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的維基是像這些問題的很好的資源。