用法

2014-01-26 17 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