如何实现基于用户选择返回类型的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,找到:long”。我不确定如何处理将Row方法返回的具体类型转换为编译器将接受的泛型类型。


关于如何做到这一点的任何想法?


ITMISS
浏览 100回答 1
1回答

慕斯709654

您可以使用Class<T>传入的用户来说服编译器您的代码的正确性,尽管它确实增加了额外运行时转换的开销:private <T> T getColumnByName(Row row, String name, Class<T> type) {&nbsp; if (type == Long.class) {&nbsp; &nbsp; return type.cast(row.getLong(name));&nbsp; } else if (type == String.class) {&nbsp; &nbsp; return type.cast(row.getString(name));&nbsp; } ... continued...}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java