用法

2014-01-26 22 views
1

檢查的RestAPIFacade類下面的方法時,我最近碰到了在Neo4j的的ResultConverter接口...用法

org.neo4j.rest.graphdb.RestAPIFacade.query(String statement, Map<String, Object> params, ResultConverter resultConverter) 

思考它可能參與了查詢結果的方式的轉換指定的Java類如下面的代碼說明..

public interface ResultConverter<T, R> { 
R convert(T value, Class<R> type); 

ResultConverter NO_OP_RESULT_CONVERTER = new ResultConverter() { 
    @Override 
    public Object convert(Object value, Class type) { 
     return null; 
    } 
}; 

}

我開始四處尋找文檔上的界面上的使用d什麼類型的T和R(我有點懷疑R可能是類可以轉換成的類型),但我到目前爲止已經不多。任何人都可以給我一個關於在查詢方法的上下文中應該做什麼的問題? 示例真的有幫助。

謝謝。

回答

2

如果你看看結果類型RestAPIFacade的查詢方法,你會看到它返回的QueryResult中你有一大堆的方法,你的結果轉換爲其他類型的一個QueryResult<T>

,這些方法然後使用結果轉換器進行轉換。

public interface QueryResult<T> extends Iterable<T> { 
    <R> ConvertedResult<R> to(Class<R> type); 
    <R> ConvertedResult<R> to(Class<R> type, ResultConverter<T, R> resultConverter); 
    void handle(Handler<T> handler); 
} 

to方法返回一個ConvertedResult然後是任一類型R的可迭代或具有方法來訪問類型的單個值R.

public interface ConvertedResult<R> extends Iterable<R> { 
    R single(); 
    R singleOrNull(); 
    void handle(Handler<R> handler); 
} 

因此,在這種情況下是TMap<String, Object>R將是您的目標類型。默認的Converter支持轉換爲節點和路徑對象,反之亦然。請參閱implementation here

+0

非常感謝。這當然有幫助!我會給它一個鏡頭並回報。 – Jome

+0

Hi @Michael,所以這意味着我可以爲ResultConverter可以處理的自定義類編寫一個轉換器,對吧? – Jome