Java RowMapper如何成为匿名类
我在阅读《Spring in Action》时发现了类似这样的东西,如果RowMapper是文档中的一个接口,那么有人能解释一下我们是如何将它作为一个匿名类使用的吗Java RowMapper如何成为匿名类,java,spring,Java,Spring,我在阅读《Spring in Action》时发现了类似这样的东西,如果RowMapper是文档中的一个接口,那么有人能解释一下我们是如何将它作为一个匿名类使用的吗 public Employee getEmployeeById(long id) { return jdbcTemplate.queryForObject( "select id, firstname, lastname, salary " + "from employee wh
public Employee getEmployeeById(long id) {
return jdbcTemplate.queryForObject(
"select id, firstname, lastname, salary " +
"from employee where id=?",
new RowMapper<Employee>() {
public Employee mapRow(ResultSet rs,
int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getLong("id"));
employee.setFirstName(rs.getString("firstname"));
employee.setLastName(rs.getString("lastname"));
employee.setSalary(rs.getBigDecimal("salary"));
return employee;
}
},
id);
}
公共雇员getEmployeeById(长id){
返回jdbcTemplate.queryForObject(
选择id、姓氏、姓氏、薪资+
“来自id=?”的员工,
新的行映射器(){
公共雇员映射行(结果集rs,
int rowNum)抛出SQLException{
员工=新员工();
employee.setId(rs.getLong(“id”));
employee.setFirstName(rs.getString(“firstname”);
employee.setLastName(rs.getString(“lastname”);
员工工资(rs.getBigDecimal(“工资”));
返回员工;
}
},
身份证);
}
语法
new SomeInterface() {
// Definition for abstract methods
}
定义一个。只要接口中指定的所有方法都在大括号中定义,这就是实现给定接口的有效类
请注意,此表达式隐式定义了一个匿名类和该类的实例。匿名类
newsomething(){…}
不是Something
的实例。相反,它是某物的子类/实现。因此,从接口派生匿名类是非常有效和有用的 类不是类的实例,而是定义类的另一种方式,类似于嵌套类,但由于与方法相关,因此可重用性较差。
因为您可以定义实现接口的类
public A implements B {
}
您可以引用该类的实例,将其声明为接口
B b = new A();
您也可以使用匿名类来完成此操作。
唯一要做和记住的事情(对于编译器),就是必须实现接口本身中定义的所有方法
该解决方案是一种更简洁的方法:
public EmployeeController {
public Employee getEmployeeById(long id) {
return jdbcTemplate.queryForObject(
"select id, firstname, lastname, salary " +
"from employee where id=?",
new CustomRowMapper(),
id);
}
class CustomRowMapper implements RowMapper<Employee>() {
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getLong("id"));
employee.setFirstName(rs.getString("firstname"));
employee.setLastName(rs.getString("lastname"));
employee.setSalary(rs.getBigDecimal("salary"));
return employee;
}
}
}
public EmployeeController{
公共雇员getEmployeeById(长id){
返回jdbcTemplate.queryForObject(
选择id、姓氏、姓氏、薪资+
“来自id=?”的员工,
新建CustomRowMapper(),
身份证);
}
类CustomRowMapper实现RowMapper(){
公共雇员mapRow(ResultSet rs,int rowNum)抛出SQLException{
员工=新员工();
employee.setId(rs.getLong(“id”));
employee.setFirstName(rs.getString(“firstname”);
employee.setLastName(rs.getString(“lastname”);
员工工资(rs.getBigDecimal(“工资”));
返回员工;
}
}
}