理解通用方法

时间:2014-02-21 08:49:22

标签: java generics

我想调用以下方法:

<C extends Iterable<R>> C as(Class<C> container)

(任何熟悉spring-data-neo4j的人都会认为这是EndResult的一种方法 类)。

我对generics还不太满意,而且我不明白如何调用这种方法。

ArrayList<Point> pointlist = neo4jtemplate.findAll(Line.class).as( ?? );

findAll()方法返回一个可迭代的基本Neo4j“节点”,并链接.as()。它的方法将该结果转换为另一种类型的迭代。如果我想将其转换为可迭代的(例如)Point个对象,我将如何调用此方法?

1 个答案:

答案 0 :(得分:4)

参数container必须是实现类型Iterable的{​​{1}}接口的类的Class对象。例如:

R

如果Iterable类型为neo4jtemplate.findAll(Line.class).as(MyClassThatIteratesOverTypeR.class); ,可能是:

Point

或简单地说:

class PointIterator implements Iterable<Point> {
    // you would have to implement all the method of Iterator
}

然后:

class PointIterator extends ArrayList<Point> { } // That's all you need

请注意,泛型不允许您创建类型文字:

neo4jtemplate.findAll(Line.class).as(PointIterator.class);