Java通用行映射器

时间:2014-04-18 19:11:07

标签: java generics

在Java中,当我得到ResultSet时,我创建了一个将其映射到指定类的方法。它或多或少看起来像这样:

public <T> T mapRow(ResultSet results, Class<T> type) {

所以,当我实际调用该类时,它看起来像这样:

mapRow(results, Row.class);

请帮我理解这一点。

  1. 为什么我不能只做mapRow<Row>(results);
  2. 之类的事情
  3. 另外,我调用mapRow的当前方式是,在方法调用之前是否有隐含的<Row>

2 个答案:

答案 0 :(得分:3)

您可以致电:

object.<Row>mapRow(results, Row.class);

但是你仍然需要第二个参数,你不能删除你想要做的事情。

这是因为由于generics erasure而无法在运行mapRow时知道T的类型。

答案 1 :(得分:2)

  

我正在调用mapRow的当前方式,在方法调用之前是否存在隐含?

<T> T mapRow()声明的要点是T 从方法参数推断 或者为其分配结果的LHS类型。在您的情况下,您传入一个类对象,用于推断返回类型。

以上只是类参数目的的一半,第二部分是反射mapRow将在其上调用newInstance()来创建返回的对象