如何实现根据用户选择返回 Type 的 Java 函数?



我正在尝试实现此方法,该方法接受数据库的行和列名,并且它返回该单元格中的值。用户期望通过Class<T> type指定的类型。

// This return T, the value under the columnName in the row.
public <T> T getColumnByName(Row row, String columnName, Class<T> type)

,我可以访问此对象,称为Row,它可以方便地为我提供:

row.getString(String columnName) // Gets String stored under column
row.getLong(String columnName) // Gets the Long stored under column
etc...

所以这是非常基本的,但是我对仿制药有些困扰。我试图以这种方式实现getColumnByName

private <T> T getColumnByName(Row row, String name, Class<T> type) {
  if (type == Long.class) {
    return row.getLong(name);
  } else if (type == String.class) {
    return row.getString(name);
  } ... continued...
}

但是,我遇到了一个错误"不兼容类型,需要:t,发现:长"。我不确定如何处理Row方法返回到编译器所接受的通用类型的混凝土类型。

对如何完成的任何想法?

您可以使用用户传递的Class<T>说服编译器您的代码的正确性,尽管它确实添加了额外运行时的开销:

private <T> T getColumnByName(Row row, String name, Class<T> type) {
  if (type == Long.class) {
    return type.cast(row.getLong(name));
  } else if (type == String.class) {
    return type.cast(row.getString(name));
  } ... continued...
}

最新更新