为了账号安全,请及时绑定邮箱和手机立即绑定

如何实现基于用户选择返回类型的Java函数?

如何实现基于用户选择返回类型的Java函数?

ITMISS 2022-11-02 15:34:36
我正在尝试实现这个接受数据库行和列名的方法,它返回该单元格中的值。用户期望的类型由他们通过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 columnrow.getLong(String columnName) // Gets the Long stored under columnetc...所以这是非常基本的,但我对泛型有点卡住了。我试图以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方法返回的具体类型转换为编译器将接受的泛型类型。关于如何做到这一点的任何想法?
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

您可以使用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...

}


查看完整回答
反对 回复 2022-11-02
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信