我正在尝试实现Spring的RowMapper接口,但是,我的IDE提示我将返回对象强制转换为“T”,我不明白为什么。谁能解释我错过的东西?
public class UserMapper<T> implements RowMapper<T> {
public T mapRow(ResultSet rs, int row) throws SQLException {
User user = new User();
user.firstName(rs.getInt("fname"));
user.lastName(rs.getFloat("lname"));
return user; // Why am I being prompted to cast this to "T", should this be fine?
}
}
答案 0 :(得分:10)
如果某行映射到用户,则该行应为RowMapper<User>
即:
public class UserMapper implements RowMapper<User> {
public User mapRow(ResultSet rs, int row) throws SQLException {
User user = new User();
user.firstName(rs.getInt("fname"));
user.lastName(rs.getFloat("lname"));
return user;
}
}
答案 1 :(得分:3)
尝试
public class UserMapper implements RowMapper<User> {
答案 2 :(得分:3)
编译器对T一无所知。因此,它要求您将User
投射到T
。如果您只打算将T用作User
的类型,则可以使用以下内容来限制泛型类型并为编译器提供更多信息。
public class UserMapper<T extends User> implements RowMapper<T>
...
如果您的代码实际上是这样的,那么您总是返回User
并且它不依赖于T
。因此,您应该只返回User
而不是T
。
答案 3 :(得分:0)
因为T!=用户。