我正在尝试实现此方法,该方法接受数据库的行和列名,并且它返回该单元格中的值。用户期望通过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...
}