我是Java的新手,特别是编写通用代码。我的任务是编写泛型函数,它将返回ResultSet
对象的ID列的值。
父类有整数ID,子类有字符串ID(我知道有字符串ID,但数据非常具体)
所以在父类中我最终得到了函数:
public <T> T getRowId(ResultSet rs) throws SQLException {
return (T)((Long)rs.getLong(idCol));
}
并且在子类中我有一个覆盖父级的方法:
public <T> T getRowId(ResultSet rs) throws SQLException {
return (T)(rs.getString(idCol));
}
当我需要调用此函数时,我只是这样做:
getRowId(rs)
我的问题是,如果进行双重投射(T)((Long)...)
是好的吗?是否有更简单的方法来实现我不知道的这个功能?
答案 0 :(得分:0)
正如评论所说,如果您确切知道自己获得了T
或Long
,那么投放到String
是没有意义的。
您可以采取以下两种方法:
方法1:
@SuppressWarnings("unchecked")
public static <T> T getRowId(ResultSet rs) throws SQLException {
return (T)rs.getObject(1);
}
方法2:
public interface RowMapper<T>{
public T getRowId(ResultSet rs) throws SQLException;
}
public class ParentRowMapper implements RowMapper<Long>{
public Long getRowId(ResultSet rs) throws SQLException {
return rs.getLong(1);
}
}
public class ChildRowMapper implements RowMapper<String>{
public String getRowId(ResultSet rs) throws SQLException {
return rs.getString(1);
}
}